Mirror of openTARS 5.2 Ranger (revision 2026110101)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +5 -0
- LICENSE +21 -0
- README.md +50 -0
- app/LICENSE +21 -0
- app/empacotamento/appimage/AppRun +16 -0
- app/empacotamento/appimage/build.sh +78 -0
- app/empacotamento/appimage/dentro_do_chroot.sh +95 -0
- app/empacotamento/appimage/opentars.desktop +11 -0
- app/empacotamento/appimage/opentars.svg +10 -0
- app/empacotamento/appimage/requirements.txt +7 -0
- app/empacotamento/bin/opentars +32 -0
- app/empacotamento/bin/opentars-gui +87 -0
- app/empacotamento/build.sh +71 -0
- app/empacotamento/conferir.sh +61 -0
- app/empacotamento/debian/control +30 -0
- app/empacotamento/debian/postinst +32 -0
- app/empacotamento/debian/postrm +30 -0
- app/empacotamento/desktop/opentars.desktop.in +17 -0
- app/empacotamento/doc/changelog +108 -0
- app/empacotamento/doc/copyright +28 -0
- app/empacotamento/gerar_desktop.py +47 -0
- app/empacotamento/icone/opentars.svg +10 -0
- app/empacotamento/linux/instalar.sh +173 -0
- app/empacotamento/linux/testar_conteiner.sh +64 -0
- app/empacotamento/macos/instalar.sh +136 -0
- app/empacotamento/macos/opentars.icns +0 -0
- app/empacotamento/setup.sh +391 -0
- app/empacotamento/windows/instalar.ps1 +152 -0
- app/empacotamento/windows/opentars.ico +0 -0
- app/idiomas/en.json +1699 -0
- app/idiomas/pt_BR.json +1767 -0
- app/logo.svg +10 -0
- app/modelos/murph.json +0 -0
- app/murph/LEIA-ME.md +44 -0
- app/murph/comparar.py +89 -0
- app/murph/dados.py +24 -0
- app/murph/filtro_traducoes_teste.json +776 -0
- app/murph/gerado/de.json +506 -0
- app/murph/gerado/en.json +506 -0
- app/murph/gerado/es.json +506 -0
- app/murph/gerado/extra.json +88 -0
- app/murph/gerado/fr.json +506 -0
- app/murph/gerado/pt_BR.json +506 -0
- app/murph/gerado_limpo.json +0 -0
- app/murph/limpar.py +80 -0
- app/murph/tars_exemplos.py +550 -0
- app/murph/tars_exemplos_mais.py +696 -0
- app/murph/teste_cego.json +1402 -0
- app/murph/teste_cego.py +127 -0
- app/murph/treinar_murph.py +108 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
app/tars_qt/fontes/IBMPlexMono-Medium.ttf filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
app/tars_qt/fontes/IBMPlexMono-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
app/tars_qt/fontes/IBMPlexSans-Medium.ttf filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
app/tars_qt/fontes/IBMPlexSans-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
app/tars_qt/fontes/IBMPlexSans-SemiBold.ttf filter=lfs diff=lfs merge=lfs -text
|
LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2026 Project TARS
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- assistant
|
| 5 |
+
- local-ai
|
| 6 |
+
- desktop
|
| 7 |
+
- tool-use
|
| 8 |
+
language:
|
| 9 |
+
- en
|
| 10 |
+
- pt
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
# openTARS
|
| 14 |
+
|
| 15 |
+
A local AI assistant for Linux, Windows and macOS. Ask in your own words and it opens programs, clicks buttons by name, types, searches the web, looks at the screen and runs commands. With a local model, processing stays on your machine. No subscription.
|
| 16 |
+
|
| 17 |
+
This repository is a **mirror** of the app for people who find openTARS here. The source of truth, issues and releases are on GitHub: https://github.com/project-opentars/OpenTARS. Website: https://project-opentars.github.io/OpenTARS/
|
| 18 |
+
|
| 19 |
+
## What is here
|
| 20 |
+
|
| 21 |
+
- `opentars_all.deb`: the Ubuntu/Debian package (version 5.2 "Ranger", revision 2026110101).
|
| 22 |
+
- `app/`: the application source and the installers (`app/empacotamento/`).
|
| 23 |
+
- `LICENSE`: MIT.
|
| 24 |
+
|
| 25 |
+
## Install
|
| 26 |
+
|
| 27 |
+
Windows 10 or 11, in PowerShell:
|
| 28 |
+
|
| 29 |
+
```powershell
|
| 30 |
+
irm https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/windows/instalar.ps1 | iex
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
macOS 12 or newer, in Terminal:
|
| 34 |
+
|
| 35 |
+
```bash
|
| 36 |
+
curl -fsSL https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/macos/instalar.sh | bash
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
Ubuntu, Debian and derivatives:
|
| 40 |
+
|
| 41 |
+
```bash
|
| 42 |
+
wget -O /tmp/opentars.deb https://github.com/project-opentars/OpenTARS/raw/main/opentars_all.deb && sudo apt install -y --reinstall /tmp/opentars.deb
|
| 43 |
+
```
|
| 44 |
+
|
| 45 |
+
The Windows and macOS installers are still early and have only been tested in automated runs and on one Windows laptop. Read the script before running it: the install commands above download and run code from GitHub.
|
| 46 |
+
|
| 47 |
+
## Models
|
| 48 |
+
|
| 49 |
+
- [Gargantua 2](https://huggingface.co/OpenTARS/Gargantua-2): the main model (2B, with vision).
|
| 50 |
+
- [Gargantua 2 Lite](https://huggingface.co/OpenTARS/Gargantua-2-Lite): the 0.8B model that runs on the CPU. You can [try it in the browser](https://huggingface.co/spaces/OpenTARS/Gargantua-2-Lite-demo).
|
app/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2026 Project TARS
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
app/empacotamento/appimage/AppRun
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# openTARS (AppImage). Sem argumento: abre a janela. "cli ...": a linha de comando (opentars --help).
|
| 3 |
+
AQUI="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
| 4 |
+
export APPDIR="${APPDIR:-$AQUI}"
|
| 5 |
+
export TARS_EMPACOTADO=appimage
|
| 6 |
+
export PYTHONPATH="$AQUI/opentars${PYTHONPATH:+:$PYTHONPATH}"
|
| 7 |
+
export PYTHONNOUSERSITE=1
|
| 8 |
+
# Acessibilidade (clicar pelo nome): os typelibs (Atspi etc.) vêm junto
|
| 9 |
+
export GI_TYPELIB_PATH="$AQUI/lib/girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
|
| 10 |
+
# O pyautogui aborta se não houver cookie do X; /dev/null só evita o crash (mesma lógica do .deb)
|
| 11 |
+
if [ -z "${XAUTHORITY:-}" ] && [ ! -f "$HOME/.Xauthority" ]; then export XAUTHORITY=/dev/null; fi
|
| 12 |
+
if [ "${1:-}" = "cli" ]; then
|
| 13 |
+
shift
|
| 14 |
+
exec "$AQUI/python/bin/python3" "$AQUI/opentars/tars.py" "$@"
|
| 15 |
+
fi
|
| 16 |
+
exec "$AQUI/python/bin/python3" -m tars_qt "$@"
|
app/empacotamento/appimage/build.sh
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Monta o AppImage do openTARS (x86_64) pra rodar na maioria das distros.
|
| 3 |
+
#
|
| 4 |
+
# sudo bash empacotamento/appimage/build.sh (gera dist/openTARS-<versão>-x86_64.AppImage e dist/SHA256SUMS.novo)
|
| 5 |
+
#
|
| 6 |
+
# Como: monta um chroot Ubuntu 22.04 (glibc 2.35: o AppImage roda em qualquer distro com glibc igual ou mais nova),
|
| 7 |
+
# põe dentro um Python 3.12 portátil (python-build-standalone), o PySide6, o PyGObject (acessibilidade) e o
|
| 8 |
+
# openTARS, e empacota com o appimagetool. Precisa de: root (chroot), debootstrap, squashfs-tools, curl, ~3 GB livres e
|
| 9 |
+
# rede para archive.ubuntu.com, pypi.org e github.com. O resultado vem de fora dos binários do sistema onde roda
|
| 10 |
+
# (o Ollama e as ferramentas do desktop continuam sendo do sistema do usuário, como no .deb).
|
| 11 |
+
|
| 12 |
+
set -euo pipefail
|
| 13 |
+
|
| 14 |
+
AQUI="$(cd "$(dirname "$0")" && pwd)"
|
| 15 |
+
RAIZ="$(cd "$AQUI/../.." && pwd)"
|
| 16 |
+
VERSAO="$(grep -m1 '^VERSAO = ' "$RAIZ/tars.py" | cut -d'"' -f2)"
|
| 17 |
+
[ -n "$VERSAO" ] || { echo "VERSAO não encontrada em tars.py" >&2; exit 1; }
|
| 18 |
+
[ "$(id -u)" = 0 ] || { echo "Precisa de root (chroot): sudo bash $0" >&2; exit 1; }
|
| 19 |
+
for ferramenta in debootstrap mksquashfs curl; do
|
| 20 |
+
command -v "$ferramenta" >/dev/null || { echo "Falta '$ferramenta' (sudo apt install debootstrap squashfs-tools curl)" >&2; exit 1; }
|
| 21 |
+
done
|
| 22 |
+
|
| 23 |
+
PBS_URL="${PBS_URL:-https://github.com/astral-sh/python-build-standalone/releases/download/20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz}"
|
| 24 |
+
TOOL_URL="https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
| 25 |
+
RUNTIME_URL="https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64"
|
| 26 |
+
CACHE="${TARS_CACHE_APPIMAGE:-$RAIZ/build/appimage-cache}"
|
| 27 |
+
ROOTFS="${TARS_ROOTFS:-$CACHE/jammy}"
|
| 28 |
+
SAIDA="$RAIZ/dist"
|
| 29 |
+
mkdir -p "$CACHE" "$SAIDA"
|
| 30 |
+
|
| 31 |
+
baixar() { [ -s "$CACHE/$2" ] || { echo "Baixando $2…"; curl -fsSL --retry 3 -o "$CACHE/$2.parte" "$1" && mv "$CACHE/$2.parte" "$CACHE/$2"; }; }
|
| 32 |
+
baixar "$PBS_URL" pbs.tgz
|
| 33 |
+
baixar "$TOOL_URL" appimagetool.AppImage
|
| 34 |
+
baixar "$RUNTIME_URL" runtime-x86_64
|
| 35 |
+
chmod +x "$CACHE/appimagetool.AppImage"
|
| 36 |
+
|
| 37 |
+
if [ ! -x "$ROOTFS/usr/bin/gcc" ]; then
|
| 38 |
+
echo "Montando o Ubuntu 22.04 (uma vez só; fica em $ROOTFS)…"
|
| 39 |
+
rm -rf "$ROOTFS"
|
| 40 |
+
debootstrap --components=main,universe --variant=minbase \
|
| 41 |
+
--include=build-essential,pkg-config,libgirepository1.0-dev,libcairo2-dev,gir1.2-atspi-2.0,libatspi2.0-0,libxcb-cursor0,libxcb-icccm4,libxcb-image0,libxcb-keysyms1,libxcb-render-util0,libxcb-shape0,libxcb-xkb1,libxkbcommon-x11-0,libxcb-xinerama0,libxcb-randr0,libxcb-sync1,libxcb-xfixes0,libxcb-util1 \
|
| 42 |
+
jammy "$ROOTFS" http://archive.ubuntu.com/ubuntu
|
| 43 |
+
fi
|
| 44 |
+
|
| 45 |
+
# o que entra no chroot
|
| 46 |
+
rm -rf "$ROOTFS/tmp/app" "$ROOTFS/tmp/ca"
|
| 47 |
+
mkdir -p "$ROOTFS/tmp/app" "$ROOTFS/tmp/ca"
|
| 48 |
+
cp "$RAIZ"/tars*.py "$ROOTFS/tmp/app/"
|
| 49 |
+
for pasta in nucleo modelos idiomas tars_qt; do cp -r "$RAIZ/$pasta" "$ROOTFS/tmp/app/$pasta"; done
|
| 50 |
+
cp "$CACHE/pbs.tgz" "$ROOTFS/tmp/pbs.tgz"
|
| 51 |
+
cp "$AQUI/requirements.txt" "$AQUI/dentro_do_chroot.sh" "$ROOTFS/tmp/"
|
| 52 |
+
mv "$ROOTFS/tmp/requirements.txt" "$ROOTFS/tmp/req.txt"
|
| 53 |
+
cp /etc/resolv.conf "$ROOTFS/etc/resolv.conf"
|
| 54 |
+
for ca in "${SSL_CERT_FILE:-}" /root/.ccr/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt; do
|
| 55 |
+
[ -n "$ca" ] && [ -s "$ca" ] && { cp "$ca" "$ROOTFS/tmp/ca/ca-bundle.crt"; break; }
|
| 56 |
+
done
|
| 57 |
+
mount --bind /dev "$ROOTFS/dev" 2>/dev/null || true
|
| 58 |
+
mount -t proc proc "$ROOTFS/proc" 2>/dev/null || true
|
| 59 |
+
trap 'umount "$ROOTFS/proc" "$ROOTFS/dev" 2>/dev/null || true' EXIT
|
| 60 |
+
|
| 61 |
+
chroot "$ROOTFS" env PROXY="${HTTPS_PROXY:-}" NOPROXY="${NO_PROXY:-}" bash /tmp/dentro_do_chroot.sh
|
| 62 |
+
|
| 63 |
+
# AppDir final
|
| 64 |
+
TRABALHO="$RAIZ/build/appimage"
|
| 65 |
+
rm -rf "$TRABALHO"; mkdir -p "$TRABALHO"
|
| 66 |
+
cp -a "$ROOTFS/opt/AppDir" "$TRABALHO/AppDir"
|
| 67 |
+
cp "$AQUI/AppRun" "$AQUI/opentars.desktop" "$AQUI/opentars.svg" "$TRABALHO/AppDir/"
|
| 68 |
+
chmod 755 "$TRABALHO/AppDir/AppRun"
|
| 69 |
+
ln -sf opentars.svg "$TRABALHO/AppDir/.DirIcon"
|
| 70 |
+
|
| 71 |
+
DESTINO="$SAIDA/openTARS-${VERSAO}-x86_64.AppImage"
|
| 72 |
+
rm -f "$DESTINO"
|
| 73 |
+
ARCH=x86_64 "$CACHE/appimagetool.AppImage" --appimage-extract-and-run --comp zstd \
|
| 74 |
+
--runtime-file "$CACHE/runtime-x86_64" "$TRABALHO/AppDir" "$DESTINO"
|
| 75 |
+
chmod 755 "$DESTINO"
|
| 76 |
+
( cd "$SAIDA" && sha256sum "$(basename "$DESTINO")" > SHA256SUMS.novo )
|
| 77 |
+
echo "Pronto: $DESTINO ($(du -h "$DESTINO" | cut -f1))"
|
| 78 |
+
echo "Some o conteúdo de dist/SHA256SUMS.novo ao SHA256SUMS da release (o .deb também entra)."
|
app/empacotamento/appimage/dentro_do_chroot.sh
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Roda DENTRO do chroot Ubuntu 22.04 (glibc 2.35): monta /opt/AppDir com Python 3.12 portátil, PySide6, PyGObject
|
| 3 |
+
# (acessibilidade) e o openTARS. Chamado por build.sh. Variáveis: PROXY, NOPROXY (opcionais).
|
| 4 |
+
set -euo pipefail
|
| 5 |
+
AD=/opt/AppDir
|
| 6 |
+
PBS=/tmp/pbs.tgz
|
| 7 |
+
export PIP_CERT=/tmp/ca/ca-bundle.crt SSL_CERT_FILE=/tmp/ca/ca-bundle.crt REQUESTS_CA_BUNDLE=/tmp/ca/ca-bundle.crt
|
| 8 |
+
[ -n "${PROXY:-}" ] && export HTTPS_PROXY="$PROXY" https_proxy="$PROXY"
|
| 9 |
+
[ -n "${NOPROXY:-}" ] && export NO_PROXY="$NOPROXY" no_proxy="$NOPROXY"
|
| 10 |
+
|
| 11 |
+
rm -rf "$AD"; mkdir -p "$AD"
|
| 12 |
+
tar xzf "$PBS" -C "$AD" # cria $AD/python (relocável)
|
| 13 |
+
PY="$AD/python/bin/python3"
|
| 14 |
+
SP="$AD/python/lib/python3.12/site-packages"
|
| 15 |
+
|
| 16 |
+
"$PY" -m pip install --quiet --no-warn-script-location "PyGObject<3.51" pycairo patchelf -r /tmp/req.txt
|
| 17 |
+
PATCHELF="$AD/python/bin/patchelf"
|
| 18 |
+
|
| 19 |
+
# ---------- poda: o que o openTARS não usa ----------
|
| 20 |
+
PS="$SP/PySide6"
|
| 21 |
+
( cd "$PS"
|
| 22 |
+
rm -rf Qt/qml Qt/translations Qt/libexec examples include glue typesystems scripts
|
| 23 |
+
rm -f assistant linguist lupdate lrelease qmlls qmlformat qmllint qmlcachegen qmltyperegistrar designer rcc uic svgtoqml pyside6-* 2>/dev/null || true
|
| 24 |
+
rm -rf Qt/plugins/designer Qt/plugins/qmltooling Qt/plugins/qmllint Qt/plugins/tls 2>/dev/null || true
|
| 25 |
+
for f in *.abi3.so; do
|
| 26 |
+
case "$f" in QtCore*|QtGui*|QtWidgets*|QtSvg*|QtSvgWidgets*|QtTest*|QtDBus*|QtNetwork*) ;; *) rm -f "$f" "${f%%.*}.pyi" ;; esac
|
| 27 |
+
done
|
| 28 |
+
rm -f *.pyi
|
| 29 |
+
( cd Qt/lib && rm -f libQt6Quick* libQt6Qml* libQt6Designer* libQt6Help* libQt6UiTools* libQt6WaylandCompositor* \
|
| 30 |
+
libQt6Labs* libQt6Pdf* libQt6VirtualKeyboard* libQt6Multimedia* libQt6WebEngine* libQt6Sql* libQt6Concurrent* \
|
| 31 |
+
libQt6Xml* libQt6PrintSupport* libQt6Positioning* libQt6Location* libQt6Bluetooth* libQt6Sensors* \
|
| 32 |
+
libQt6Nfc* libQt6SerialPort* libQt6Test-nope 2>/dev/null || true )
|
| 33 |
+
)
|
| 34 |
+
( cd "$PS/Qt" && rm -f lib/libQt6Lottie* lib/libQt6EglFS* lib/libQt6EglFsKms* lib/libQt6WaylandEglCompositorHwIntegration* \
|
| 35 |
+
plugins/platforms/libqeglfs* plugins/platforms/libqlinuxfb* plugins/platforms/libqvkkhrdisplay* plugins/platforms/libqvnc* \
|
| 36 |
+
plugins/egldeviceintegrations -r 2>/dev/null || true; rm -rf plugins/egldeviceintegrations plugins/generic plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so )
|
| 37 |
+
find "$SP" -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
|
| 38 |
+
rm -rf "$AD/python/share" "$AD/python/include" "$AD/python/lib/pkgconfig" "$AD/python/lib/libpython3.12.a" \
|
| 39 |
+
"$AD/python/lib/python3.12/test" "$AD/python/lib/python3.12/idlelib" "$AD/python/lib/python3.12/turtledemo" \
|
| 40 |
+
"$AD/python/lib/python3.12/config-3.12-x86_64-linux-gnu" "$AD/python/lib/python3.12/ensurepip"
|
| 41 |
+
find "$AD/python/lib/python3.12" -type d \( -name test -o -name tests \) -prune -exec rm -rf {} + 2>/dev/null || true
|
| 42 |
+
rm -f "$AD/python/bin/idle3"* "$AD/python/bin/2to3"* "$AD/python/bin/pydoc"* "$AD/python/bin/pip"* "$AD/python/bin/python3-config" \
|
| 43 |
+
"$AD/python/bin/python3.12-config"
|
| 44 |
+
|
| 45 |
+
# símbolos de depuração (o libpython sozinho tinha 200 MB)
|
| 46 |
+
find "$AD/python" -type f \( -name '*.so' -o -name '*.so.*' -o -name 'python3*' \) -exec sh -c '[ "$(head -c4 "$1" | tail -c3)" = ELF ] && strip --strip-unneeded "$1" 2>/dev/null' _ {} \; || true
|
| 47 |
+
|
| 48 |
+
# ---------- bibliotecas que o sistema do usuário costuma NÃO ter ----------
|
| 49 |
+
EXCLUI='^(libc|libm|libdl|libpthread|librt|libutil|libresolv|libnsl|libanl|libBrokenLocale|libcrypt|ld-linux.*|linux-vdso|libgcc_s|libstdc\+\+|libX11|libX11-xcb|libxcb|libXau|libXdmcp|libGL|libGLX|libGLdispatch|libEGL|libOpenGL|libGLESv2|libdrm|libfontconfig|libfreetype|libexpat|libpng16|libdbus-1|libsystemd|libudev|libcap|libgcrypt|libgpg-error|liblz4|liblzma|libzstd|libbsd|libmd|libglib-2\.0|libgobject-2\.0|libgio-2\.0|libgmodule-2\.0|libpcre|libmount|libblkid|libselinux|libz|libuuid)\.so'
|
| 50 |
+
coletar() { # coletar <destino> <arquivos ou nomes de .so>...: copia o fecho das dependências (menos o EXCLUI)
|
| 51 |
+
local destino="$1"; shift
|
| 52 |
+
mkdir -p "$destino"
|
| 53 |
+
local alvo
|
| 54 |
+
for alvo in "$@"; do
|
| 55 |
+
[ -e "$alvo" ] || alvo="$(ldconfig -p | awk -v n="$alvo" '$1==n {print $NF}' | head -1 || true)"
|
| 56 |
+
[ -n "$alvo" ] && [ -e "$alvo" ] || continue
|
| 57 |
+
ldd "$alvo" 2>/dev/null | awk '/=>/ && $3 ~ /^\// {print $3}' | while read -r lib; do
|
| 58 |
+
base="$(basename "$lib")"
|
| 59 |
+
[[ "$base" =~ $EXCLUI ]] && continue
|
| 60 |
+
case "$lib" in "$AD"/*) continue ;; esac
|
| 61 |
+
[ -e "$destino/$base" ] || cp -L "$lib" "$destino/$base"
|
| 62 |
+
done
|
| 63 |
+
case "$alvo" in "$AD"/*) ;; *) b="$(basename "$alvo")"; [[ "$b" =~ $EXCLUI ]] || { [ -e "$destino/$b" ] || cp -L "$alvo" "$destino/$b"; } ;; esac
|
| 64 |
+
done
|
| 65 |
+
}
|
| 66 |
+
GI="$SP/gi"
|
| 67 |
+
GILIBS="$GI/lib"
|
| 68 |
+
coletar "$GILIBS" "$GI"/_gi*.so "$SP"/gi/_gi_cairo*.so "$SP"/cairo/_cairo*.so libatspi.so.0 libgirepository-1.0.so.1
|
| 69 |
+
# bibliotecas do Qt (plugin xcb): as que faltam numa instalação mínima
|
| 70 |
+
coletar "$PS/Qt/lib" libxcb-cursor.so.0 libxcb-icccm.so.4 libxcb-image.so.0 libxcb-keysyms.so.1 libxcb-render-util.so.0 \
|
| 71 |
+
libxcb-shape.so.0 libxcb-xkb.so.1 libxkbcommon-x11.so.0 libxkbcommon.so.0 libxcb-util.so.1 libxcb-xinerama.so.0 \
|
| 72 |
+
libxcb-randr.so.0 libxcb-sync.so.1 libxcb-xfixes.so.0
|
| 73 |
+
# rpath: cada pasta enxerga as suas (sem LD_LIBRARY_PATH, que vazaria para os programas que o TARS abre)
|
| 74 |
+
for f in "$GI"/_gi*.so "$SP"/cairo/_cairo*.so; do
|
| 75 |
+
[ -e "$f" ] || continue
|
| 76 |
+
case "$f" in "$SP"/cairo/*) "$PATCHELF" --set-rpath '$ORIGIN/../gi/lib' "$f" ;; *) "$PATCHELF" --set-rpath '$ORIGIN/lib' "$f" ;; esac
|
| 77 |
+
done
|
| 78 |
+
for f in "$GILIBS"/*.so*; do [ -L "$f" ] || "$PATCHELF" --set-rpath '$ORIGIN' "$f" 2>/dev/null || true; done
|
| 79 |
+
for f in "$PS"/Qt/lib/libxcb-*.so* "$PS"/Qt/lib/libxkbcommon*.so*; do [ -L "$f" ] || "$PATCHELF" --set-rpath '$ORIGIN' "$f" 2>/dev/null || true; done
|
| 80 |
+
|
| 81 |
+
# typelibs (Atspi, GLib, GObject, Gio, cairo...); a glib em si vem do sistema (os módulos do GIO dele continuam valendo)
|
| 82 |
+
mkdir -p "$AD/lib/girepository-1.0"
|
| 83 |
+
cp /usr/lib/x86_64-linux-gnu/girepository-1.0/*.typelib "$AD/lib/girepository-1.0/"
|
| 84 |
+
|
| 85 |
+
# ---------- o programa ----------
|
| 86 |
+
rm -rf "$AD/opentars"; mkdir -p "$AD/opentars"
|
| 87 |
+
cp -r /tmp/app/. "$AD/opentars/"
|
| 88 |
+
find "$AD/opentars" -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
|
| 89 |
+
"$PY" -m compileall -q "$AD/opentars" >/dev/null 2>&1 || true # abre mais rápido (o AppImage é só leitura)
|
| 90 |
+
|
| 91 |
+
# ---------- pip e patchelf não vão no pacote ----------
|
| 92 |
+
"$PY" -m pip uninstall -y -q patchelf >/dev/null 2>&1 || true
|
| 93 |
+
rm -rf "$SP"/pip* "$SP"/_distutils_hack 2>/dev/null || true
|
| 94 |
+
find "$SP" -name 'patchelf*' -prune -exec rm -rf {} + 2>/dev/null || true
|
| 95 |
+
du -sh "$AD"
|
app/empacotamento/appimage/opentars.desktop
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Desktop Entry]
|
| 2 |
+
Type=Application
|
| 3 |
+
Name=openTARS
|
| 4 |
+
Comment=Control your computer by talking to it
|
| 5 |
+
Comment[pt_BR]=Controle seu computador conversando
|
| 6 |
+
Exec=AppRun
|
| 7 |
+
Icon=opentars
|
| 8 |
+
Categories=Utility;
|
| 9 |
+
Terminal=false
|
| 10 |
+
StartupNotify=true
|
| 11 |
+
StartupWMClass=opentars
|
app/empacotamento/appimage/opentars.svg
ADDED
|
|
app/empacotamento/appimage/requirements.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dependências do openTARS dentro do AppImage (o Python vem junto, 3.12).
|
| 2 |
+
requests
|
| 3 |
+
psutil
|
| 4 |
+
pyautogui
|
| 5 |
+
pillow
|
| 6 |
+
python-xlib
|
| 7 |
+
PySide6-Essentials
|
app/empacotamento/bin/opentars
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Lançador do openTARS na linha de comando (diagnóstico, --voz, --explicar...). Também atende por "tars".
|
| 3 |
+
|
| 4 |
+
set -euo pipefail
|
| 5 |
+
|
| 6 |
+
DIR_OPENTARS="/usr/share/opentars"
|
| 7 |
+
VENV_PYTHON="$DIR_OPENTARS/venv/bin/python3"
|
| 8 |
+
|
| 9 |
+
if [ "${1:-}" = "--setup" ] || [ "${1:-}" = "--configurar" ]; then
|
| 10 |
+
# O setup escreve em /usr/share/opentars, então precisa de root.
|
| 11 |
+
if [ "$(id -u)" -ne 0 ]; then
|
| 12 |
+
# --preserve-env: o sudo zera o ambiente, e o setup precisa de OLLAMA_HOST e das opções TARS_*
|
| 13 |
+
exec sudo --preserve-env=OLLAMA_HOST,TARS_COM_COOPER,TARS_SEM_COOPER,TARS_SEM_GARGANTUA,TARS_MODELO_GARGANTUA,TARS_MODELO_COOPER,TARS_MODELO_CONVERSA,TARS_SEM_MODELO,TARS_IDIOMA bash "$DIR_OPENTARS/setup.sh"
|
| 14 |
+
fi
|
| 15 |
+
exec bash "$DIR_OPENTARS/setup.sh"
|
| 16 |
+
fi
|
| 17 |
+
|
| 18 |
+
# O pyautogui (via python-xlib) aborta na importação se não houver
|
| 19 |
+
# arquivo de autorização do X. Em sessões sem ~/.Xauthority e sem
|
| 20 |
+
# $XAUTHORITY definido não existe cookie nenhum mesmo, então apontar
|
| 21 |
+
# pra um arquivo vazio só evita o crash, sem mudar a permissão de acesso.
|
| 22 |
+
if [ -z "${XAUTHORITY:-}" ] && [ ! -f "$HOME/.Xauthority" ]; then
|
| 23 |
+
# GNOME/Wayland: o cookie do XWayland fica em /run/user/<uid>/ (apontar pra /dev/null impede a conexão)
|
| 24 |
+
XAUTH_WAYLAND="$(ls "${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"/.mutter-Xwaylandauth.* 2>/dev/null | head -n1 || true)"
|
| 25 |
+
export XAUTHORITY="${XAUTH_WAYLAND:-/dev/null}"
|
| 26 |
+
fi
|
| 27 |
+
|
| 28 |
+
if [ -x "$VENV_PYTHON" ]; then
|
| 29 |
+
exec "$VENV_PYTHON" "$DIR_OPENTARS/tars.py" "$@"
|
| 30 |
+
else
|
| 31 |
+
exec python3 "$DIR_OPENTARS/tars.py" "$@"
|
| 32 |
+
fi
|
app/empacotamento/bin/opentars-gui
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Lançador da interface gráfica do openTARS. Também atende por "tars-gui".
|
| 3 |
+
# opentars-gui abre a janela
|
| 4 |
+
# opentars-gui --rapido abre a barra rápida (é o que o atalho global chama)
|
| 5 |
+
# opentars-gui --acoes abre o painel das ações de texto com o texto selecionado (5.2)
|
| 6 |
+
# opentars-gui --residente sobe escondido, só com o ícone (início com o sistema do assistente, 5.2)
|
| 7 |
+
# (sem sessão gráfica: abre a conversa no terminal, "opentars --chat")
|
| 8 |
+
|
| 9 |
+
set -euo pipefail
|
| 10 |
+
|
| 11 |
+
DIR_OPENTARS="/usr/share/opentars"
|
| 12 |
+
PYTHON="$DIR_OPENTARS/venv/bin/python3"
|
| 13 |
+
[ -x "$PYTHON" ] || PYTHON=python3
|
| 14 |
+
|
| 15 |
+
# O pyautogui (via python-xlib) aborta na importação se não houver
|
| 16 |
+
# arquivo de autorização do X. Em sessões sem ~/.Xauthority e sem
|
| 17 |
+
# $XAUTHORITY definido não existe cookie nenhum mesmo, então apontar
|
| 18 |
+
# pra um arquivo vazio só evita o crash, sem mudar a permissão de acesso.
|
| 19 |
+
if [ -z "${XAUTHORITY:-}" ] && [ ! -f "$HOME/.Xauthority" ]; then
|
| 20 |
+
export XAUTHORITY=/dev/null
|
| 21 |
+
fi
|
| 22 |
+
|
| 23 |
+
# 4.5: sem sessão gráfica (servidor, SSH, WSL sem WSLg) a janela não tem onde abrir:
|
| 24 |
+
# vai pra conversa no terminal.
|
| 25 |
+
if { [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]; } || [ "${TARS_SEM_INTERFACE:-}" = "1" ]; then
|
| 26 |
+
case "${LANG:-}${TARS_IDIOMA:-}" in
|
| 27 |
+
pt*) echo "[openTARS] Sem sessão gráfica: abrindo a conversa no terminal (opentars --chat)." >&2 ;;
|
| 28 |
+
*) echo "[openTARS] No graphical session: opening the terminal chat (opentars --chat)." >&2 ;;
|
| 29 |
+
esac
|
| 30 |
+
exec /usr/bin/opentars --chat
|
| 31 |
+
fi
|
| 32 |
+
|
| 33 |
+
# Já está aberto? Só manda o recado pra ele (mostrar a janela ou a barra)
|
| 34 |
+
# e sai: só biblioteca padrão, responde na hora — sem carregar o openTARS
|
| 35 |
+
# inteiro de novo.
|
| 36 |
+
comando=mostrar
|
| 37 |
+
for arg in "$@"; do
|
| 38 |
+
case "$arg" in --rapido|--quick) comando=rapido ;; --acoes|--actions) comando=acoes ;; --residente) comando=residente ;; esac
|
| 39 |
+
done
|
| 40 |
+
if "$PYTHON" -c 'import sys; sys.path.insert(0, sys.argv[1]); import tars_instancia as i; sys.exit(0 if i.enviar(sys.argv[2], sys.argv[3] or None) else 1)' \
|
| 41 |
+
"$DIR_OPENTARS" "$comando" "${DESKTOP_STARTUP_ID:-}" 2>/dev/null; then
|
| 42 |
+
exit 0
|
| 43 |
+
fi
|
| 44 |
+
|
| 45 |
+
# 5.0: com PySide6 abre a janela em Qt (o assistente de primeiro uso, se ainda não foi feito,
|
| 46 |
+
# e depois a janela principal) e a barra rápida (--rapido) também é em Qt. Só --tk, TARS_SEM_QT=1
|
| 47 |
+
# e a falta de PySide6 seguem na janela da 4.6 (Tkinter).
|
| 48 |
+
usar_qt=1
|
| 49 |
+
for arg in "$@"; do
|
| 50 |
+
case "$arg" in --tk) usar_qt=0 ;; esac
|
| 51 |
+
done
|
| 52 |
+
if [ "$usar_qt" = "1" ] && [ "${TARS_SEM_QT:-}" != "1" ] \
|
| 53 |
+
&& "$PYTHON" -c 'import PySide6.QtWidgets, PySide6.QtSvgWidgets' 2>/dev/null; then
|
| 54 |
+
# O openTARS controla a tela pelo X (pyautogui, xdotool; no Wayland, pelo XWayland): abrir a janela também pelo X
|
| 55 |
+
# (xcb) evita o plugin Wayland do PySide6, que derruba o programa (segfault) em várias máquinas.
|
| 56 |
+
# QT_QPA_PLATFORM=wayland (ou outro valor) continua valendo se você definir.
|
| 57 |
+
if [ -z "${QT_QPA_PLATFORM:-}" ] && [ -n "${DISPLAY:-}" ]; then
|
| 58 |
+
export QT_QPA_PLATFORM=xcb
|
| 59 |
+
fi
|
| 60 |
+
# Se o Qt cair (queda nativa: código 128+sinal de erro), não deixa a pessoa sem nada: tenta uma vez em modo
|
| 61 |
+
# seguro (sem substituição de fontes, o caminho que derruba o fontconfig de algumas máquinas) e, se cair de novo
|
| 62 |
+
# logo na abertura, abre a janela da 4.6 (Tkinter). O motivo da queda fica em ~/.tars_log/qt.log.
|
| 63 |
+
inicio=$SECONDS
|
| 64 |
+
codigo=0
|
| 65 |
+
PYTHONPATH="$DIR_OPENTARS" "$PYTHON" -m tars_qt "$@" || codigo=$?
|
| 66 |
+
case "$codigo" in 132|134|135|136|139)
|
| 67 |
+
case "${LANG:-}${TARS_IDIOMA:-}" in
|
| 68 |
+
pt*) echo "[openTARS] A janela Qt caiu (código $codigo). Tentando de novo em modo seguro. Detalhes: ~/.tars_log/qt.log" >&2 ;;
|
| 69 |
+
*) echo "[openTARS] The Qt window crashed (code $codigo). Retrying in safe mode. Details: ~/.tars_log/qt.log" >&2 ;;
|
| 70 |
+
esac
|
| 71 |
+
inicio=$SECONDS
|
| 72 |
+
codigo=0
|
| 73 |
+
TARS_FONTES_SEM_SUBSTITUIR=1 PYTHONPATH="$DIR_OPENTARS" "$PYTHON" -m tars_qt "$@" || codigo=$?
|
| 74 |
+
case "$codigo" in 132|134|135|136|139)
|
| 75 |
+
if [ $((SECONDS - inicio)) -lt 15 ]; then
|
| 76 |
+
case "${LANG:-}${TARS_IDIOMA:-}" in
|
| 77 |
+
pt*) echo "[openTARS] Caiu de novo. Abrindo a janela simples." >&2 ;;
|
| 78 |
+
*) echo "[openTARS] Crashed again. Opening the simple window." >&2 ;;
|
| 79 |
+
esac
|
| 80 |
+
exec "$PYTHON" "$DIR_OPENTARS/tars_gui.py" --tk "$@"
|
| 81 |
+
fi ;;
|
| 82 |
+
esac ;;
|
| 83 |
+
esac
|
| 84 |
+
exit "$codigo"
|
| 85 |
+
fi
|
| 86 |
+
|
| 87 |
+
exec "$PYTHON" "$DIR_OPENTARS/tars_gui.py" "$@"
|
app/empacotamento/build.sh
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Monta o .deb do openTARS a partir dos arquivos-fonte.
|
| 3 |
+
# Uso: bash empacotamento/build.sh (gera dist/opentars_<versão>_all.deb)
|
| 4 |
+
|
| 5 |
+
set -euo pipefail
|
| 6 |
+
umask 022 # pastas 0755 / arquivos 0644 no pacote, qualquer que seja a umask de quem compila (dpkg-deb recusa DEBIAN 0700)
|
| 7 |
+
|
| 8 |
+
RAIZ="$(cd "$(dirname "$0")/.." && pwd)"
|
| 9 |
+
# Versão tem uma fonte só: a constante VERSAO do tars.py.
|
| 10 |
+
VERSAO="$(grep -m1 '^VERSAO = ' "$RAIZ/tars.py" | cut -d'"' -f2)"
|
| 11 |
+
[ -n "$VERSAO" ] || { echo "VERSAO não encontrada em tars.py" >&2; exit 1; }
|
| 12 |
+
REVISAO="$(grep -m1 '^REVISAO = ' "$RAIZ/tars.py" | cut -d' ' -f3)"
|
| 13 |
+
[ -n "$REVISAO" ] || { echo "REVISAO não encontrada em tars.py" >&2; exit 1; }
|
| 14 |
+
FONTE="$RAIZ/empacotamento"
|
| 15 |
+
PKG="$RAIZ/build/opentars_${VERSAO}"
|
| 16 |
+
SAIDA="$RAIZ/dist"
|
| 17 |
+
|
| 18 |
+
rm -rf "$PKG"
|
| 19 |
+
mkdir -p "$PKG/DEBIAN" \
|
| 20 |
+
"$PKG/usr/bin" \
|
| 21 |
+
"$PKG/usr/share/opentars" \
|
| 22 |
+
"$PKG/usr/share/applications" \
|
| 23 |
+
"$PKG/usr/share/icons/hicolor/scalable/apps" \
|
| 24 |
+
"$PKG/usr/share/doc/opentars" \
|
| 25 |
+
"$SAIDA"
|
| 26 |
+
|
| 27 |
+
# Programa: os módulos tars*.py e os textos de cada idioma
|
| 28 |
+
for modulo in "$RAIZ"/tars*.py; do
|
| 29 |
+
install -m 644 "$modulo" "$PKG/usr/share/opentars/$(basename "$modulo")"
|
| 30 |
+
done
|
| 31 |
+
# 5.2: a camada de plataforma (um backend por sistema)
|
| 32 |
+
install -d "$PKG/usr/share/opentars/tars_plataforma"
|
| 33 |
+
install -m 644 "$RAIZ"/tars_plataforma/*.py "$PKG/usr/share/opentars/tars_plataforma/"
|
| 34 |
+
# 5.0: a janela em Qt (PySide6): tars_qt/ com as fontes IBM Plex (licença OFL)
|
| 35 |
+
install -d "$PKG/usr/share/opentars/tars_qt/fontes"
|
| 36 |
+
install -m 644 "$RAIZ"/tars_qt/*.py "$PKG/usr/share/opentars/tars_qt/"
|
| 37 |
+
install -m 644 "$RAIZ"/tars_qt/fontes/* "$PKG/usr/share/opentars/tars_qt/fontes/"
|
| 38 |
+
# Núcleo em partes (3.0): o tars.py executa nucleo/*.py
|
| 39 |
+
install -d "$PKG/usr/share/opentars/nucleo"
|
| 40 |
+
install -m 644 "$RAIZ"/nucleo/*.py "$PKG/usr/share/opentars/nucleo/"
|
| 41 |
+
# Murph (3.0.4): o modelo que decide o tipo do pedido
|
| 42 |
+
install -d "$PKG/usr/share/opentars/modelos"
|
| 43 |
+
install -m 644 "$RAIZ"/modelos/*.json "$PKG/usr/share/opentars/modelos/"
|
| 44 |
+
install -d "$PKG/usr/share/opentars/idiomas"
|
| 45 |
+
install -m 644 "$RAIZ"/idiomas/*.json "$PKG/usr/share/opentars/idiomas/"
|
| 46 |
+
install -m 755 "$FONTE/setup.sh" "$PKG/usr/share/opentars/setup.sh"
|
| 47 |
+
|
| 48 |
+
# Comandos (+ atalhos com o nome antigo)
|
| 49 |
+
install -m 755 "$FONTE/bin/opentars" "$PKG/usr/bin/opentars"
|
| 50 |
+
install -m 755 "$FONTE/bin/opentars-gui" "$PKG/usr/bin/opentars-gui"
|
| 51 |
+
ln -s opentars "$PKG/usr/bin/tars"
|
| 52 |
+
ln -s opentars-gui "$PKG/usr/bin/tars-gui"
|
| 53 |
+
|
| 54 |
+
# Menu (os atalhos saem dos modelos, com os nomes em todos os idiomas) e ícone
|
| 55 |
+
python3 "$FONTE/gerar_desktop.py" "$FONTE/desktop" "$PKG/usr/share/applications"
|
| 56 |
+
chmod 644 "$PKG"/usr/share/applications/*.desktop
|
| 57 |
+
install -m 644 "$FONTE/icone/opentars.svg" "$PKG/usr/share/icons/hicolor/scalable/apps/opentars.svg"
|
| 58 |
+
|
| 59 |
+
# Documentação
|
| 60 |
+
install -m 644 "$FONTE/doc/copyright" "$PKG/usr/share/doc/opentars/copyright"
|
| 61 |
+
gzip -9n -c "$FONTE/doc/changelog" > "$PKG/usr/share/doc/opentars/changelog.gz"
|
| 62 |
+
chmod 644 "$PKG/usr/share/doc/opentars/changelog.gz"
|
| 63 |
+
|
| 64 |
+
# Controle
|
| 65 |
+
TAMANHO=$(du -sk --exclude=DEBIAN "$PKG" | cut -f1)
|
| 66 |
+
sed -e "s/@VERSAO@/$VERSAO+$REVISAO/" -e "s/@TAMANHO@/$TAMANHO/" "$FONTE/debian/control" > "$PKG/DEBIAN/control"
|
| 67 |
+
install -m 755 "$FONTE/debian/postinst" "$PKG/DEBIAN/postinst"
|
| 68 |
+
install -m 755 "$FONTE/debian/postrm" "$PKG/DEBIAN/postrm"
|
| 69 |
+
|
| 70 |
+
dpkg-deb --root-owner-group --build "$PKG" "$SAIDA/opentars_${VERSAO}_all.deb"
|
| 71 |
+
echo "Gerado: $SAIDA/opentars_${VERSAO}_all.deb"
|
app/empacotamento/conferir.sh
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Conferência antes de publicar o app (16/10). Junta as travas dos defeitos que já escaparam:
|
| 3 |
+
# 1. textos: idiomas iguais, chaves existentes, nenhum glifo fora da IBM Plex, tudo compila (tests/test_textos.py);
|
| 4 |
+
# 2. a suíte inteira, sem nenhuma falha aceita;
|
| 5 |
+
# 3. fumaça na TELA DE VERDADE (tests/fumaca_tela_real.py): a suíte roda em tela falsa e com cache de fontes novo,
|
| 6 |
+
# e por isso não viu a queda dos Probes na 2026101603;
|
| 7 |
+
# 4. REVISAO maior que a do .deb publicado (o mesmo número duas vezes já confundiu instalações do Lab).
|
| 8 |
+
# Uso: bash empacotamento/conferir.sh (em fonte/app; código 0 = pode empacotar)
|
| 9 |
+
|
| 10 |
+
set -uo pipefail
|
| 11 |
+
cd "$(dirname "$0")/.."
|
| 12 |
+
PY=/usr/share/opentars/venv/bin/python3
|
| 13 |
+
[ -x "$PY" ] || PY=python3
|
| 14 |
+
CONHECIDAS="" # 16/10: as três "de ambiente" eram defeitos dos testes e foram corrigidas; nenhuma falha é aceita
|
| 15 |
+
problemas=()
|
| 16 |
+
registro=$(mktemp)
|
| 17 |
+
trap 'rm -f "$registro"' EXIT
|
| 18 |
+
|
| 19 |
+
echo "== 1/4 Textos, glifos e compilação"
|
| 20 |
+
(cd tests && "$PY" test_textos.py) || problemas+=("textos (tests/test_textos.py)")
|
| 21 |
+
|
| 22 |
+
echo "== 2/4 Suíte (alguns minutos)"
|
| 23 |
+
if command -v xvfb-run >/dev/null; then
|
| 24 |
+
(cd tests && xvfb-run -a "$PY" -u run_all.py) > "$registro" 2>&1
|
| 25 |
+
else
|
| 26 |
+
(cd tests && QT_QPA_PLATFORM=offscreen "$PY" -u run_all.py) > "$registro" 2>&1
|
| 27 |
+
fi
|
| 28 |
+
linha=$(grep -E "^FALHARAM \(" "$registro" | tail -1)
|
| 29 |
+
if [ -n "$linha" ]; then
|
| 30 |
+
for teste in $(echo "${linha#*: }" | tr ',' ' '); do
|
| 31 |
+
case " $CONHECIDAS " in *" $teste "*) ;; *) problemas+=("suíte: $teste");; esac
|
| 32 |
+
done
|
| 33 |
+
fi
|
| 34 |
+
echo "${linha:-suíte sem falhas}"
|
| 35 |
+
|
| 36 |
+
echo "== 3/4 Fumaça na tela de verdade"
|
| 37 |
+
if (cd tests && timeout 300 "$PY" fumaca_tela_real.py) > /dev/null 2>&1; then
|
| 38 |
+
echo "a janela abriu todas as telas sem cair"
|
| 39 |
+
else
|
| 40 |
+
problemas+=("fumaça na tela real (rode: cd tests && $PY fumaca_tela_real.py)")
|
| 41 |
+
fi
|
| 42 |
+
|
| 43 |
+
echo "== 4/4 REVISAO"
|
| 44 |
+
nova=$(grep -oP '^REVISAO = \K\d+' tars.py)
|
| 45 |
+
publicado="../../opentars_all.deb"
|
| 46 |
+
if [ -f "$publicado" ]; then
|
| 47 |
+
antiga=$(dpkg-deb -f "$publicado" Version 2>/dev/null | grep -oP '\+\K\d+$' || echo 0)
|
| 48 |
+
if [ "${nova:-0}" -le "${antiga:-0}" ]; then
|
| 49 |
+
problemas+=("REVISAO $nova não é maior que a do opentars_all.deb da entrega ($antiga): suba em tars.py")
|
| 50 |
+
fi
|
| 51 |
+
echo "REVISAO nova $nova, entrega $antiga"
|
| 52 |
+
fi
|
| 53 |
+
|
| 54 |
+
echo
|
| 55 |
+
if [ ${#problemas[@]} -eq 0 ]; then
|
| 56 |
+
echo "CONFERÊNCIA OK: pode rodar bash empacotamento/build.sh"
|
| 57 |
+
exit 0
|
| 58 |
+
fi
|
| 59 |
+
echo "CONFERÊNCIA FALHOU:"
|
| 60 |
+
printf ' - %s\n' "${problemas[@]}"
|
| 61 |
+
exit 1
|
app/empacotamento/debian/control
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Package: opentars
|
| 2 |
+
Version: @VERSAO@
|
| 3 |
+
Section: utils
|
| 4 |
+
Priority: optional
|
| 5 |
+
Architecture: all
|
| 6 |
+
Depends: python3 (>= 3.8), python3-venv, python3-pip, python3-requests, python3-psutil, python3-pil, curl, ca-certificates, zstd, pciutils
|
| 7 |
+
Recommends: libxcb-cursor0, libxkbcommon-x11-0, libxcb-icccm4, libxcb-image0, libxcb-keysyms1, libxcb-render-util0, libxcb-xinerama0, libegl1, libgl1, python3-tk, python3-pil.imagetk, python3-xlib, python3-gi, gir1.2-atspi-2.0, at-spi2-core, xclip, gnome-screenshot | kde-spectacle | grim, wl-clipboard, libgtk-3-bin, libglib2.0-bin, libnotify-bin, xdg-utils, poppler-utils, alsa-utils | pulseaudio-utils
|
| 8 |
+
Suggests: ydotool
|
| 9 |
+
Conflicts: tars
|
| 10 |
+
Replaces: tars
|
| 11 |
+
Provides: tars
|
| 12 |
+
Installed-Size: @TAMANHO@
|
| 13 |
+
Maintainer: Enzo <enzorcasao@gmail.com>
|
| 14 |
+
Homepage: https://github.com/project-opentars/OpenTARS
|
| 15 |
+
Description: 100% local AI assistant for the Linux desktop
|
| 16 |
+
openTARS is an AI assistant that runs entirely on your machine (through
|
| 17 |
+
Ollama), with no cloud. It understands requests in Portuguese and English
|
| 18 |
+
and controls the desktop: opens and closes
|
| 19 |
+
apps, clicks buttons by name, types, searches the web, looks at the screen
|
| 20 |
+
and runs terminal commands.
|
| 21 |
+
.
|
| 22 |
+
Its official AI is Gargantua (ollama pull ProjectOpenTARS/Gargantua), a
|
| 23 |
+
small model trained to use openTARS tools, which the installer downloads.
|
| 24 |
+
It also adapts to whatever AI models you already have in Ollama, picking
|
| 25 |
+
the best one for each kind of task. Comes with a window ("opentars-gui"), a
|
| 26 |
+
quick bar opened by a global shortcut ("opentars-gui --rapido") and a
|
| 27 |
+
terminal mode ("opentars --chat") that also works on WSL and on Linux
|
| 28 |
+
without a graphical session. Files (images, text, PDF...) can be attached
|
| 29 |
+
to a request. The optional Cooper model (ollama pull ProjectOpenTARS/cooper)
|
| 30 |
+
helps it look at the screen.
|
app/empacotamento/debian/postinst
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Executado pelo dpkg/apt depois de copiar os arquivos do pacote.
|
| 3 |
+
# A lógica de "o que instalar e o que pular" mora em setup.sh, que
|
| 4 |
+
# também pode ser rodado de novo a qualquer momento com
|
| 5 |
+
# "opentars --setup" (ex: se a internet caiu durante a instalação).
|
| 6 |
+
|
| 7 |
+
set -e
|
| 8 |
+
|
| 9 |
+
case "$1" in
|
| 10 |
+
configure)
|
| 11 |
+
# Migração do pacote antigo "tars" (<= 1.0.0): o dpkg já removeu
|
| 12 |
+
# os arquivos dele, mas o ambiente Python que o setup antigo criou
|
| 13 |
+
# em /usr/share/tars/venv não pertence a nenhum pacote e ficaria
|
| 14 |
+
# órfão ocupando espaço. Os dados do usuário (~/.tars_sessoes.json,
|
| 15 |
+
# ~/.tars_log/) ficam no home e continuam intactos.
|
| 16 |
+
if [ -d /usr/share/tars/venv ] && ! dpkg-query -W -f='${Status}' tars 2>/dev/null | grep -q "ok installed"; then
|
| 17 |
+
rm -rf /usr/share/tars/venv
|
| 18 |
+
rmdir /usr/share/tars 2>/dev/null || true
|
| 19 |
+
fi
|
| 20 |
+
|
| 21 |
+
bash /usr/share/opentars/setup.sh || true
|
| 22 |
+
|
| 23 |
+
if command -v update-desktop-database >/dev/null 2>&1; then
|
| 24 |
+
update-desktop-database -q /usr/share/applications || true
|
| 25 |
+
fi
|
| 26 |
+
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
|
| 27 |
+
gtk-update-icon-cache -q -t /usr/share/icons/hicolor || true
|
| 28 |
+
fi
|
| 29 |
+
;;
|
| 30 |
+
esac
|
| 31 |
+
|
| 32 |
+
exit 0
|
app/empacotamento/debian/postrm
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Não mexe no Ollama nem nos modelos baixados (não são deste pacote),
|
| 3 |
+
# nem no histórico/log de cada usuário (~/.tars_sessoes.json,
|
| 4 |
+
# ~/.tars_log/) — isso é dado do usuário e continua intacto caso o
|
| 5 |
+
# openTARS seja reinstalado depois.
|
| 6 |
+
#
|
| 7 |
+
# O ambiente Python (/usr/share/opentars/venv) foi criado pelo setup.sh,
|
| 8 |
+
# e o __pycache__ pelo próprio Python ao rodar a GUI — nenhum dos dois
|
| 9 |
+
# pelo dpkg, então o dpkg não sabe apagá-los sozinho. Ele é removido
|
| 10 |
+
# aqui na desinstalação — mas NÃO numa atualização ("upgrade"), pra não
|
| 11 |
+
# precisar baixar tudo de novo a cada versão nova.
|
| 12 |
+
|
| 13 |
+
set -e
|
| 14 |
+
|
| 15 |
+
case "$1" in
|
| 16 |
+
remove|purge)
|
| 17 |
+
rm -rf /usr/share/opentars/venv
|
| 18 |
+
find /usr/share/opentars -name __pycache__ -prune -exec rm -rf {} + 2>/dev/null || true
|
| 19 |
+
rmdir /usr/share/opentars 2>/dev/null || true
|
| 20 |
+
;;
|
| 21 |
+
esac
|
| 22 |
+
|
| 23 |
+
if command -v update-desktop-database >/dev/null 2>&1; then
|
| 24 |
+
update-desktop-database -q /usr/share/applications || true
|
| 25 |
+
fi
|
| 26 |
+
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
|
| 27 |
+
gtk-update-icon-cache -q -t /usr/share/icons/hicolor || true
|
| 28 |
+
fi
|
| 29 |
+
|
| 30 |
+
exit 0
|
app/empacotamento/desktop/opentars.desktop.in
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Desktop Entry]
|
| 2 |
+
Type=Application
|
| 3 |
+
Name=openTARS
|
| 4 |
+
GenericName=@desktop.generico@
|
| 5 |
+
Comment=@desktop.comentario@
|
| 6 |
+
Exec=/usr/bin/opentars-gui
|
| 7 |
+
Icon=opentars
|
| 8 |
+
Terminal=false
|
| 9 |
+
Categories=Utility;
|
| 10 |
+
Keywords=@desktop.palavras@
|
| 11 |
+
StartupNotify=true
|
| 12 |
+
StartupWMClass=Opentars
|
| 13 |
+
Actions=barra-rapida;
|
| 14 |
+
|
| 15 |
+
[Desktop Action barra-rapida]
|
| 16 |
+
Name=@desktop.barra_rapida@
|
| 17 |
+
Exec=/usr/bin/opentars-gui --rapido
|
app/empacotamento/doc/changelog
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
opentars (5.2) unstable; urgency=medium
|
| 2 |
+
|
| 3 |
+
5.2 Ranger
|
| 4 |
+
* 27/10: a conferência pela busca só vale para pergunta de fato: um pedido de poema ou de texto não dispara mais
|
| 5 |
+
pesquisa na web. Uma busca não roda duas vezes no mesmo pedido, e há um limite de três buscas por pedido.
|
| 6 |
+
* 26/10: atualizar com o assistente ligado funciona (o app se reinicia sozinho depois de instalar);
|
| 7 |
+
a voz baixa com barra de progresso; "Mais modelos" marca o que combina com a placa e a memória
|
| 8 |
+
do computador; a pesquisa pelo SearXNG vem ligada (sem ele, abre no navegador); menos
|
| 9 |
+
trabalho em segundo plano parado.
|
| 10 |
+
* Windows, macOS e outros Linux (Fedora, Arch, openSUSE): instaladores de um comando, sem
|
| 11 |
+
administrador (uv, Python 3.12 e o Ollama do usuário), com opentars --desinstalar. Testados
|
| 12 |
+
no GitHub Actions (Windows, macOS, Ubuntu) e em contêineres; o Windows passou pelo primeiro
|
| 13 |
+
teste numa máquina de verdade em 24/10 (dois defeitos no primeiro uso, corrigidos). O macOS
|
| 14 |
+
ainda não rodou num Mac de verdade. Sem assinatura paga: o site ensina o "Executar assim
|
| 15 |
+
mesmo" do Windows e o app do macOS é montado e assinado ad-hoc na própria máquina.
|
| 16 |
+
* Assistente do sistema: a barra rápida vazia vira um lançador (fazer uma tarefa, perguntar
|
| 17 |
+
sobre a tela, pesquisar na web, lembrete, buscar arquivos); ações de texto em qualquer
|
| 18 |
+
programa (Ctrl+Alt+R: corrigir, resumir, traduzir pt/en e perguntar sobre o trecho, sem
|
| 19 |
+
ferramentas; o trecho é dado, nunca ordem); ações em arquivos selecionados (resumir,
|
| 20 |
+
renomear pelo conteúdo com prévia, mover, lixeira, desfazer); editar uma foto por frase
|
| 21 |
+
(cortar, girar, clarear, reduzir, trocar o formato; sempre uma cópia, sem os metadados);
|
| 22 |
+
sugestão pelo programa em uso; assistente residente com ícone, que inicia com o sistema.
|
| 23 |
+
Tudo do assistente vem ligado por padrão (o modelo das ações na memória, o atalho, o início
|
| 24 |
+
com o sistema e a sugestão), uma vez, na primeira abertura; o que a pessoa desligar fica
|
| 25 |
+
desligado.
|
| 26 |
+
* Gargantua 2 retreinado com os dados da 5.2 (ações de texto, dizer que não sabe, citar a
|
| 27 |
+
fonte da busca, outros sistemas): 2B 73/80 e Lite 68/80 na prova de 80 tarefas; ações de
|
| 28 |
+
texto 71/76 e 64/76. O app avisa quando o Gargantua instalado não é o publicado.
|
| 29 |
+
* Pouca confiança: numa pergunta de fato, o app mede a confiança da resposta (logprobs) e,
|
| 30 |
+
com a pesquisa ligada, confere pela busca; sem ela, avisa embaixo da resposta.
|
| 31 |
+
* opentars --prova (48 tarefas, relatório JSON) e opentars --diagnostico nos três sistemas.
|
| 32 |
+
* Revisão de 25/10: a rolagem da conversa para na última mensagem (antes sobrava vazio embaixo);
|
| 33 |
+
o Gargantua diz que se chama Gargantua e foi desenvolvido pelo Enzo, fundador do openTARS;
|
| 34 |
+
pesquisa dentro de Spotify, Amazon, Wikipedia, GitHub, Maps, Reddit e outros sites; o ícone
|
| 35 |
+
do openTARS no Windows (atalhos e barra de tarefas) e no macOS.
|
| 36 |
+
* Revisão de 26/10: ao ligar o computador o openTARS abre antes do Ollama; o aviso "Ollama não responde" agora some
|
| 37 |
+
sozinho quando ele volta (a janela confere a cada 5 s) e o resto (modelos, Lite, atualização) segue.
|
| 38 |
+
* Revisão de 25/10 (5): o aviso de versão nova fica na barra lateral, mas procurar e instalar a atualização é
|
| 39 |
+
em Configurações > Atualizações (o cartão da barra leva até lá).
|
| 40 |
+
* Revisão de 25/10 (4): "Editar uma foto" no lançador e no ícone do assistente (escolher as fotos e abrir o
|
| 41 |
+
painel de edição); a IA do assistente sai da memória 3 minutos depois do último uso (parada, não ocupa
|
| 42 |
+
memória nem placa); ligar o assistente não carrega mais nada.
|
| 43 |
+
* Revisão de 25/10 (3): o Bonsai Image cabe numa placa de 6 GB com o desktop usando parte dela
|
| 44 |
+
(o VAE fica no processador até a hora de decodificar); conferido gerando imagens de verdade.
|
| 45 |
+
* Revisão de 25/10 (2): gerar imagem pelo chat com o Bonsai Image 4B, opcional (~9,5 GB, placa
|
| 46 |
+
NVIDIA de 6 GB ou Mac com Apple Silicon; antes de gerar, o openTARS tira os outros modelos da
|
| 47 |
+
placa); modelinhos de foto baixados com o openTARS (~300 MB, na CPU): tirar o fundo, aumentar a
|
| 48 |
+
resolução 4x, selecionar por clique e remover um objeto; editar foto pelo chat; o Gargantua 2
|
| 49 |
+
Lite é baixado sempre e é a única IA em segundo plano (assistente, ações de texto e Probes); o
|
| 50 |
+
grupo "Modelos do openTARS" no topo de Mais modelos, com o Lite em destaque.
|
| 51 |
+
* Já publicados nas revisões de 21/10: Mais modelos, Gerenciar modelos e imagem local no chat.
|
| 52 |
+
|
| 53 |
+
-- openTARS <projectopentars@gmail.com> Sat, 24 Oct 2026 20:20:00 -0300
|
| 54 |
+
|
| 55 |
+
opentars (5.1) unstable; urgency=medium
|
| 56 |
+
|
| 57 |
+
5.1 Tesseract
|
| 58 |
+
* Três modos na janela: Lite (conversa, microfone e anexos), Base (mais histórico, escolha
|
| 59 |
+
de modelo, memória, rotinas, Probes e nuvem) e Pro (mais Ajustes avançados e Diagnóstico).
|
| 60 |
+
Escolha no primeiro uso (passo 2) e em Configurações > Geral. Quem atualiza da 5.0 fica no
|
| 61 |
+
Pro. Ajustes avançados: temperatura, contexto, instruções extras e ferramentas desligadas
|
| 62 |
+
(recusadas na execução; a lista do Gargantua continua a do treino).
|
| 63 |
+
* Probes: vigias em segundo plano que só leem e avisam. Vigiam pastas, páginas da web,
|
| 64 |
+
notícias e lançamentos (RSS, canal do YouTube, versões no GitHub), o computador (bateria,
|
| 65 |
+
temperatura, processador, internet, atualizações), programas (fechou, abriu, memória) e
|
| 66 |
+
projetos git. Criar é um passo a passo: escolher o que vigiar, preencher e conferir a
|
| 67 |
+
frase do que ele vai fazer; "Criar e ligar" já liga o Probe e o serviço. Os do passo a
|
| 68 |
+
passo usam uma regra fixa, sem IA; "com as minhas palavras" vira um plano pelo Gargantua.
|
| 69 |
+
Páginas e feeds só de endereços públicos, no máximo a cada 15 minutos.
|
| 70 |
+
* Avisos: um ícone de sino perto do relógio (o serviço opentars --probes, também com a
|
| 71 |
+
janela fechada) com o número de avisos e um painel ao clicar; dentro da janela, o mesmo
|
| 72 |
+
sino no topo e uma faixa quando chega um aviso. Pedidos de lixeira se aprovam no painel.
|
| 73 |
+
Desligado por padrão; chaves, senhas e dados do navegador ficam de fora. Ações escolhidas
|
| 74 |
+
pela pessoa: mover para uma pasta, ou mandar para a lixeira com aprovação a cada vez (sem
|
| 75 |
+
resposta em 30 minutos, negado).
|
| 76 |
+
* Gargantua Lite (1,1 GB) no primeiro uso e no instalador em máquina fraca (sem placa de
|
| 77 |
+
vídeo com 4 GB e com até 6 GB de RAM ou menos de 4 threads). TARS_GARGANTUA=lite|completo.
|
| 78 |
+
* Terminal no nível das CLIs de IA: opentars -p "pedido" (--output-format json, --model,
|
| 79 |
+
stdin), --new, --resume, /compactar, /contexto, /modo perguntar|plano|automatico
|
| 80 |
+
(--plan, --auto), "sempre nesta sessão" só para envio e instalação, ferramentas de código
|
| 81 |
+
para modelos que não são o Gargantua (ler, procurar, editar e criar arquivo, com diff e
|
| 82 |
+
confirmação), /desfazer, AGENTS.md, /init, !comando e linha de status.
|
| 83 |
+
* Nuvem pela conta do Ollama (sem chave de API), em Configurações > Nuvem e no primeiro uso.
|
| 84 |
+
O rodapé passa a avisar também quando o modelo escolhido é da nuvem do Ollama.
|
| 85 |
+
* Pesquisa na web pelo SearXNG, desligada por padrão (opentars --searxng prepara um local
|
| 86 |
+
com Docker): web_search e read_page, só quando o pedido fala de pesquisar, nunca para o
|
| 87 |
+
Gargantua; só endereços públicos; o que vem da web é dado.
|
| 88 |
+
* Depois de uma falha, a troca automática de modelo nunca desce para um modelo bem menor.
|
| 89 |
+
* Pedido único (-p e --chat "pedido") não sobrescreve mais a conversa salva.
|
| 90 |
+
* Gargantua Lite novo (Qwen3.5 0,8B, treinado com QAT, Q4_0): 0,6 GB com visão (o anterior,
|
| 91 |
+
Qwen3 1,7B, tinha 1,1 GB e não enxergava), 65 de 84 tarefas na prova do Lab (o anterior, 63),
|
| 92 |
+
roda só na CPU. Máquina fraca baixa ProjectOpenTARS/Gargantua:2.0-lite. O app manda
|
| 93 |
+
think=false aos modelos da família Qwen3.5 e nunca cola o "/no_think" do Qwen3 no pedido.
|
| 94 |
+
* Conversa: o app não manda mais a IA "fazer de verdade" quando só palpitou o tipo do pedido e
|
| 95 |
+
ele continua uma resposta de texto (fechou o Claude numa conversa sobre lavar o carro).
|
| 96 |
+
* Ollama antigo demais para um modelo: a mensagem diz como atualizar, em vez do erro cru.
|
| 97 |
+
* Cooper 1.2 (SmolVLM2 500M, 0,6 GB): o instalador e o primeiro uso passam a baixar o
|
| 98 |
+
ProjectOpenTARS/cooper:1.2 em vez do Cooper antigo de 2,7 GB; quem já tem o antigo continua
|
| 99 |
+
com ele, e o 1.2 passa na frente quando os dois estão instalados.
|
| 100 |
+
* Correções: a janela não cai mais com um cache de fontes corrompido (usa um cache próprio
|
| 101 |
+
em ~/.cache/opentars; antes um caractere raro derrubava o Qt, até no modo seguro); a
|
| 102 |
+
página dos Probes não usa mais um caractere que a fonte não tem; programas de tela cheia
|
| 103 |
+
(htop, vim, less...) abrem numa janela de terminal em vez de falhar; com ~/Documents e
|
| 104 |
+
~/Documentos, o caminho de um arquivo é achado na outra pasta; o serviço dos Probes abre
|
| 105 |
+
pelo X, como a janela.
|
| 106 |
+
|
| 107 |
+
-- openTARS <projectopentars@gmail.com> Fri, 16 Oct 2026 18:00:00 -0300
|
| 108 |
+
|
app/empacotamento/doc/copyright
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
| 2 |
+
Upstream-Name: openTARS
|
| 3 |
+
Source: https://github.com/project-opentars/OpenTARS
|
| 4 |
+
|
| 5 |
+
Files: *
|
| 6 |
+
Copyright: 2026 Project TARS
|
| 7 |
+
License: MIT
|
| 8 |
+
|
| 9 |
+
License: MIT
|
| 10 |
+
Copyright (c) 2026 Project TARS
|
| 11 |
+
.
|
| 12 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 13 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 14 |
+
in the Software without restriction, including without limitation the rights
|
| 15 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 16 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 17 |
+
furnished to do so, subject to the following conditions:
|
| 18 |
+
.
|
| 19 |
+
The above copyright notice and this permission notice shall be included in all
|
| 20 |
+
copies or substantial portions of the Software.
|
| 21 |
+
.
|
| 22 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 23 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 24 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 25 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 26 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 27 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 28 |
+
SOFTWARE.
|
app/empacotamento/gerar_desktop.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Gera os atalhos .desktop a partir dos modelos (*.desktop.in) com os
|
| 3 |
+
textos de todos os idiomas (idiomas/*.json): a linha "Chave=@texto@" vira
|
| 4 |
+
"Chave=<inglês>" + "Chave[pt_BR]=...", "Chave[es]=..." etc. Assim o menu
|
| 5 |
+
de aplicativos mostra o openTARS no idioma do sistema, e nenhum texto fica
|
| 6 |
+
escrito à mão no atalho.
|
| 7 |
+
|
| 8 |
+
Uso: gerar_desktop.py <pasta dos modelos> <pasta de saída>"""
|
| 9 |
+
|
| 10 |
+
import json
|
| 11 |
+
import re
|
| 12 |
+
import sys
|
| 13 |
+
from pathlib import Path
|
| 14 |
+
|
| 15 |
+
RAIZ = Path(__file__).resolve().parent.parent
|
| 16 |
+
LINHA = re.compile(r"^([A-Za-z]+)=@([a-z_.]+)@$")
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def main(origem, destino):
|
| 20 |
+
catalogos = {}
|
| 21 |
+
for arquivo in sorted((RAIZ / "idiomas").glob("*.json")):
|
| 22 |
+
catalogos[arquivo.stem] = json.loads(arquivo.read_text(encoding="utf-8"))
|
| 23 |
+
base = catalogos["en"]
|
| 24 |
+
destino.mkdir(parents=True, exist_ok=True)
|
| 25 |
+
for modelo in sorted(origem.glob("*.desktop.in")):
|
| 26 |
+
saida = []
|
| 27 |
+
for linha in modelo.read_text(encoding="utf-8").splitlines():
|
| 28 |
+
m = LINHA.match(linha)
|
| 29 |
+
if not m:
|
| 30 |
+
saida.append(linha)
|
| 31 |
+
continue
|
| 32 |
+
chave, texto = m.groups()
|
| 33 |
+
padrao = base[texto]
|
| 34 |
+
saida.append(f"{chave}={padrao}")
|
| 35 |
+
for codigo, cat in catalogos.items():
|
| 36 |
+
valor = cat.get(texto)
|
| 37 |
+
if codigo == "en" or not valor or valor == padrao:
|
| 38 |
+
continue
|
| 39 |
+
principal = cat.get("_locale", [codigo])[0]
|
| 40 |
+
for local in dict.fromkeys([principal, principal.split("_")[0]]):
|
| 41 |
+
if local != "en":
|
| 42 |
+
saida.append(f"{chave}[{local}]={valor}")
|
| 43 |
+
(destino / modelo.name[:-3]).write_text("\n".join(saida) + "\n", encoding="utf-8")
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
if __name__ == "__main__":
|
| 47 |
+
main(Path(sys.argv[1]), Path(sys.argv[2]))
|
app/empacotamento/icone/opentars.svg
ADDED
|
|
app/empacotamento/linux/instalar.sh
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# openTARS para outros Linux (Fedora, Arch, openSUSE e derivados; 5.2, experimental). No Ubuntu, Debian, Mint, Zorin e
|
| 3 |
+
# Pop!_OS o caminho continua sendo o .deb.
|
| 4 |
+
#
|
| 5 |
+
# curl -fsSL https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/linux/instalar.sh | bash
|
| 6 |
+
#
|
| 7 |
+
# O que faz: instala os pacotes do sistema que o openTARS usa pelo gerenciador da distribuição (dnf, pacman, zypper ou
|
| 8 |
+
# apt; é a única parte que pede a senha), baixa o código do app (pasta app/ do repositório) para a pasta do usuário, cria
|
| 9 |
+
# um ambiente Python com o Python do sistema (que enxerga o PyGObject e o tkinter da distribuição), instala o Ollama pelo
|
| 10 |
+
# instalador oficial se faltar, e cria os comandos opentars e opentars-gui em ~/.local/bin e o atalho no menu. O modelo
|
| 11 |
+
# (Gargantua 2) é baixado na primeira abertura, com barra. Rodar de novo atualiza. Remover: "| bash -s -- --remover".
|
| 12 |
+
# Suas conversas e configurações (em ~/.config/opentars e ~/.local/share/opentars) ficam; apague as pastas se quiser.
|
| 13 |
+
set -euo pipefail
|
| 14 |
+
|
| 15 |
+
DADOS="${XDG_DATA_HOME:-$HOME/.local/share}"
|
| 16 |
+
PASTA="$DADOS/opentars-app"
|
| 17 |
+
APP="$PASTA/app"
|
| 18 |
+
VENV="$PASTA/venv"
|
| 19 |
+
BIN="$HOME/.local/bin"
|
| 20 |
+
ATALHO="$DADOS/applications/opentars.desktop"
|
| 21 |
+
ICONE="$DADOS/icons/hicolor/scalable/apps/opentars.svg"
|
| 22 |
+
INICIO="${XDG_CONFIG_HOME:-$HOME/.config}/autostart"
|
| 23 |
+
ZIP="https://github.com/project-opentars/OpenTARS/archive/refs/heads/main.zip"
|
| 24 |
+
FONTE="" # --fonte PASTA: a pasta app/ local em vez de baixar (o CI usa)
|
| 25 |
+
SEM_OLLAMA=0 # --sem-ollama: não instala o Ollama (o CI usa)
|
| 26 |
+
SEM_SISTEMA=0 # --sem-sistema: não instala pacotes do sistema (quem já instalou à mão, ou sem sudo)
|
| 27 |
+
REMOVER=0
|
| 28 |
+
while [ $# -gt 0 ]; do
|
| 29 |
+
case "$1" in
|
| 30 |
+
--remover) REMOVER=1 ;;
|
| 31 |
+
--fonte) FONTE="$2"; shift ;;
|
| 32 |
+
--sem-ollama) SEM_OLLAMA=1 ;;
|
| 33 |
+
--sem-sistema) SEM_SISTEMA=1 ;;
|
| 34 |
+
esac
|
| 35 |
+
shift
|
| 36 |
+
done
|
| 37 |
+
case "${LANG:-}" in pt*) PT=1 ;; *) PT=0 ;; esac
|
| 38 |
+
dizer() { if [ "$PT" = 1 ]; then echo "[openTARS] $1"; else echo "[openTARS] $2"; fi; }
|
| 39 |
+
if [ "$(id -u)" = 0 ]; then SUDO=(); else SUDO=(sudo); fi
|
| 40 |
+
|
| 41 |
+
if [ "$REMOVER" = 1 ]; then
|
| 42 |
+
rm -rf "$PASTA" "$BIN/opentars" "$BIN/opentars-gui" "$ATALHO" "$ICONE" \
|
| 43 |
+
"$INICIO/opentars-assistente.desktop" "$INICIO/opentars-probes.desktop"
|
| 44 |
+
dizer "Removido. Suas conversas e configurações ficaram em ~/.config/opentars e ~/.local/share/opentars; o Ollama e os modelos também." \
|
| 45 |
+
"Removed. Your chats and settings stay in ~/.config/opentars and ~/.local/share/opentars; Ollama and the models stay too."
|
| 46 |
+
exit 0
|
| 47 |
+
fi
|
| 48 |
+
|
| 49 |
+
# 1. Pacotes do sistema: Python com venv, tkinter, PyGObject e AT-SPI (clicar pelo nome), área de transferência,
|
| 50 |
+
# notificações, lixeira (gio), PDF, áudio e as bibliotecas que a janela Qt usa
|
| 51 |
+
if [ "$SEM_SISTEMA" = 0 ]; then
|
| 52 |
+
if command -v dnf >/dev/null 2>&1; then
|
| 53 |
+
INSTALAR=(dnf install -y)
|
| 54 |
+
PACOTES=(python3 python3-tkinter python3-gobject gobject-introspection at-spi2-core curl zstd pciutils xdg-utils xclip wl-clipboard
|
| 55 |
+
libnotify glib2 poppler-utils alsa-utils xcb-util-cursor xcb-util-wm xcb-util-image xcb-util-keysyms
|
| 56 |
+
xcb-util-renderutil libxkbcommon-x11 mesa-libEGL mesa-libGL fontconfig)
|
| 57 |
+
elif command -v pacman >/dev/null 2>&1; then
|
| 58 |
+
INSTALAR=(pacman -S --needed --noconfirm)
|
| 59 |
+
PACOTES=(python python-gobject at-spi2-core tk curl zstd pciutils xdg-utils xclip wl-clipboard libnotify glib2
|
| 60 |
+
poppler alsa-utils xcb-util-cursor xcb-util-wm xcb-util-image xcb-util-keysyms xcb-util-renderutil libxkbcommon-x11
|
| 61 |
+
libglvnd fontconfig)
|
| 62 |
+
elif command -v zypper >/dev/null 2>&1; then
|
| 63 |
+
INSTALAR=(zypper --non-interactive install --no-recommends)
|
| 64 |
+
PACOTES=(python3 python3-gobject typelib-1_0-Atspi-2_0 at-spi2-core python3-tk curl zstd pciutils xdg-utils xclip
|
| 65 |
+
wl-clipboard libnotify-tools glib2-tools poppler-tools alsa-utils libxcb-cursor0 libxcb-icccm4 libxcb-image0
|
| 66 |
+
libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxkbcommon-x11-0
|
| 67 |
+
libgthread-2_0-0 Mesa-libEGL1 Mesa-libGL1 fontconfig)
|
| 68 |
+
elif command -v apt-get >/dev/null 2>&1; then
|
| 69 |
+
dizer "Debian/Ubuntu: o caminho recomendado é o .deb (README). Seguindo com o script mesmo assim." \
|
| 70 |
+
"Debian/Ubuntu: the recommended way is the .deb (README). Going on with the script anyway."
|
| 71 |
+
INSTALAR=(apt-get install -y)
|
| 72 |
+
PACOTES=(python3 python3-venv python3-tk python3-gi gir1.2-atspi-2.0 at-spi2-core curl zstd pciutils xdg-utils xclip
|
| 73 |
+
wl-clipboard libnotify-bin libglib2.0-bin poppler-utils alsa-utils libxcb-cursor0 libxcb-icccm4 libxcb-image0
|
| 74 |
+
libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-xinerama0 libxkbcommon-x11-0
|
| 75 |
+
libegl1 libgl1 fontconfig)
|
| 76 |
+
"${SUDO[@]}" apt-get update -qq || true
|
| 77 |
+
else
|
| 78 |
+
dizer "Não reconheci o gerenciador de pacotes (dnf, pacman, zypper, apt). Instale à mão: python3 com venv, tkinter, PyGObject e at-spi2-core, e rode de novo com --sem-sistema." \
|
| 79 |
+
"Unknown package manager (dnf, pacman, zypper, apt). Install by hand: python3 with venv, tkinter, PyGObject and at-spi2-core, then run again with --sem-sistema."
|
| 80 |
+
exit 1
|
| 81 |
+
fi
|
| 82 |
+
dizer "Instalando os pacotes do sistema (${INSTALAR[0]}; pode pedir a sua senha): ${PACOTES[*]}" \
|
| 83 |
+
"Installing the system packages (${INSTALAR[0]}; may ask for your password): ${PACOTES[*]}"
|
| 84 |
+
if ! "${SUDO[@]}" "${INSTALAR[@]}" "${PACOTES[@]}"; then
|
| 85 |
+
# um nome que esta versão da distribuição não tem não pode derrubar o resto: tenta um a um
|
| 86 |
+
FALTARAM=()
|
| 87 |
+
for pacote in "${PACOTES[@]}"; do
|
| 88 |
+
"${SUDO[@]}" "${INSTALAR[@]}" "$pacote" >/dev/null 2>&1 || FALTARAM+=("$pacote")
|
| 89 |
+
done
|
| 90 |
+
if [ ${#FALTARAM[@]} -gt 0 ]; then
|
| 91 |
+
dizer "Não consegui instalar: ${FALTARAM[*]} (o openTARS abre sem eles, com menos recursos)." \
|
| 92 |
+
"Could not install: ${FALTARAM[*]} (openTARS opens without them, with fewer features)."
|
| 93 |
+
fi
|
| 94 |
+
fi
|
| 95 |
+
fi
|
| 96 |
+
if ! command -v python3 >/dev/null 2>&1; then
|
| 97 |
+
dizer "Falta o python3. No Arch, atualize o sistema antes (sudo pacman -Syu) e rode este comando de novo." \
|
| 98 |
+
"python3 is missing. On Arch, update the system first (sudo pacman -Syu) and run this command again."
|
| 99 |
+
exit 1
|
| 100 |
+
fi
|
| 101 |
+
|
| 102 |
+
dizer "Instalando em $PASTA." "Installing into $PASTA."
|
| 103 |
+
mkdir -p "$PASTA" "$BIN"
|
| 104 |
+
|
| 105 |
+
# 2. O código do app (o zip é aberto pelo próprio Python: não depende do unzip)
|
| 106 |
+
TEMP="$(mktemp -d)"
|
| 107 |
+
trap 'rm -rf "$TEMP"' EXIT
|
| 108 |
+
if [ -n "$FONTE" ]; then
|
| 109 |
+
ORIGEM="$(cd "$FONTE" && pwd)"
|
| 110 |
+
else
|
| 111 |
+
dizer "Baixando o openTARS..." "Downloading openTARS..."
|
| 112 |
+
curl -fsSL "$ZIP" -o "$TEMP/opentars.zip"
|
| 113 |
+
python3 -m zipfile -e "$TEMP/opentars.zip" "$TEMP"
|
| 114 |
+
ORIGEM="$TEMP/OpenTARS-main/app"
|
| 115 |
+
fi
|
| 116 |
+
[ -f "$ORIGEM/tars.py" ] || { echo "tars.py not found in $ORIGEM" >&2; exit 1; }
|
| 117 |
+
rm -rf "$APP"
|
| 118 |
+
cp -R "$ORIGEM" "$APP"
|
| 119 |
+
touch "$APP/.instalado-pelo-script" # a hora da instalação; o app avisa do lançamento seguinte com o comando, não com o .deb
|
| 120 |
+
|
| 121 |
+
# 3. O ambiente Python, com o Python do sistema (--system-site-packages: o PyGObject e o tkinter vêm da distribuição)
|
| 122 |
+
if ! "$VENV/bin/python3" -c "import sys" >/dev/null 2>&1; then
|
| 123 |
+
rm -rf "$VENV"
|
| 124 |
+
dizer "Preparando o Python ($(python3 --version 2>&1)) e as dependências (alguns minutos na primeira vez)..." \
|
| 125 |
+
"Setting up Python ($(python3 --version 2>&1)) and the dependencies (a few minutes the first time)..."
|
| 126 |
+
python3 -m venv --system-site-packages "$VENV" || {
|
| 127 |
+
dizer "Não consegui criar o ambiente Python (falta o módulo venv da distribuição?)." \
|
| 128 |
+
"Could not create the Python environment (is the distribution's venv module missing?)."
|
| 129 |
+
exit 1; }
|
| 130 |
+
fi
|
| 131 |
+
"$VENV/bin/python3" -m pip install --quiet --upgrade pip
|
| 132 |
+
"$VENV/bin/python3" -m pip install --quiet requests psutil pyautogui pillow PySide6-Essentials numpy onnxruntime
|
| 133 |
+
|
| 134 |
+
# 4. O Ollama, pelo instalador oficial (ele mesmo pede a senha). Sem ele o openTARS abre, mas não tem IA local.
|
| 135 |
+
if [ "$SEM_OLLAMA" = 0 ]; then
|
| 136 |
+
if command -v ollama >/dev/null 2>&1; then
|
| 137 |
+
dizer "Ollama já instalado." "Ollama already installed."
|
| 138 |
+
else
|
| 139 |
+
dizer "Instalando o Ollama (o instalador oficial; pode pedir a sua senha)..." \
|
| 140 |
+
"Installing Ollama (the official installer; may ask for your password)..."
|
| 141 |
+
curl -fsSL https://ollama.com/install.sh -o "$TEMP/ollama.sh" && sh "$TEMP/ollama.sh" \
|
| 142 |
+
|| dizer "Não consegui instalar o Ollama; veja https://ollama.com/download" "Could not install Ollama; see https://ollama.com/download"
|
| 143 |
+
fi
|
| 144 |
+
fi
|
| 145 |
+
|
| 146 |
+
# 5. Comandos: o opentars-gui é o mesmo do .deb (instância única, modo seguro do Qt), com os caminhos daqui
|
| 147 |
+
printf '#!/bin/bash\nexec "%s/bin/python3" "%s/tars.py" "$@"\n' "$VENV" "$APP" > "$BIN/opentars"
|
| 148 |
+
"$VENV/bin/python3" - "$APP/empacotamento/bin/opentars-gui" "$BIN/opentars-gui" "$APP" "$VENV" "$BIN" <<'PY'
|
| 149 |
+
import sys
|
| 150 |
+
origem, destino, app, venv, pasta_bin = sys.argv[1:]
|
| 151 |
+
texto = open(origem, encoding="utf-8").read()
|
| 152 |
+
for velho, novo in (('DIR_OPENTARS="/usr/share/opentars"', f'DIR_OPENTARS="{app}"'),
|
| 153 |
+
('PYTHON="$DIR_OPENTARS/venv/bin/python3"', f'PYTHON="{venv}/bin/python3"'),
|
| 154 |
+
("exec /usr/bin/opentars --chat", f'exec "{pasta_bin}/opentars" --chat')):
|
| 155 |
+
assert texto.count(velho) == 1, f"o lançador do .deb mudou: {velho}"
|
| 156 |
+
texto = texto.replace(velho, novo)
|
| 157 |
+
open(destino, "w", encoding="utf-8").write(texto)
|
| 158 |
+
PY
|
| 159 |
+
chmod +x "$BIN/opentars" "$BIN/opentars-gui"
|
| 160 |
+
|
| 161 |
+
# 6. Atalho no menu de aplicativos, nos idiomas do app, e o ícone
|
| 162 |
+
"$VENV/bin/python3" "$APP/empacotamento/gerar_desktop.py" "$APP/empacotamento/desktop" "$TEMP/desktop"
|
| 163 |
+
mkdir -p "$(dirname "$ATALHO")" "$(dirname "$ICONE")"
|
| 164 |
+
sed "s|/usr/bin/opentars-gui|\"$BIN/opentars-gui\"|" "$TEMP/desktop/opentars.desktop" > "$ATALHO"
|
| 165 |
+
cp "$APP/empacotamento/icone/opentars.svg" "$ICONE"
|
| 166 |
+
command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database -q "$(dirname "$ATALHO")" || true
|
| 167 |
+
|
| 168 |
+
dizer "Pronto. Abra o openTARS pelo menu de aplicativos (na primeira vez ele baixa o Gargantua 2, com barra)." \
|
| 169 |
+
"Done. Open openTARS from the application menu (the first time it downloads Gargantua 2, with a progress bar)."
|
| 170 |
+
case ":$PATH:" in *":$BIN:"*) ;; *) dizer "Os comandos ficaram em $BIN; para usar no terminal: export PATH=\"$BIN:\$PATH\"" \
|
| 171 |
+
"The commands are in $BIN; to use them in a terminal: export PATH=\"$BIN:\$PATH\"" ;; esac
|
| 172 |
+
dizer "Para conferir e medir: 'opentars --diagnostico' e 'opentars --prova'; mande os relatórios que eles salvam." \
|
| 173 |
+
"To check and measure: 'opentars --diagnostico' and 'opentars --prova'; send the reports they save."
|
app/empacotamento/linux/testar_conteiner.sh
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Teste do instalar.sh num contêiner de Fedora, Arch ou openSUSE (o CI usa; à mão também):
|
| 3 |
+
# docker run --rm -v "$PWD/app:/fonte:ro" fedora:latest bash /fonte/empacotamento/linux/testar_conteiner.sh
|
| 4 |
+
# Instala como root (pacotes do sistema), depois como usuário comum, confere o ambiente, o diagnóstico, alguns testes,
|
| 5 |
+
# a janela de verdade num X virtual, e remove. Sem Ollama e sem modelo.
|
| 6 |
+
set -euo pipefail
|
| 7 |
+
INSTALADOR=/fonte/empacotamento/linux/instalar.sh
|
| 8 |
+
passo() { echo; echo "######## $*"; }
|
| 9 |
+
|
| 10 |
+
if command -v pacman >/dev/null; then
|
| 11 |
+
passo "Arch: o contêiner vem com a base velha; atualizar antes (o instalador pede isso no Arch)"
|
| 12 |
+
pacman -Syu --noconfirm >/dev/null
|
| 13 |
+
fi
|
| 14 |
+
|
| 15 |
+
passo "Instalação como root (pacotes do sistema)"
|
| 16 |
+
time bash "$INSTALADOR" --fonte /fonte --sem-ollama
|
| 17 |
+
|
| 18 |
+
passo "Pacotes só para o teste: Xvfb"
|
| 19 |
+
if command -v dnf >/dev/null; then dnf install -y -q xorg-x11-server-Xvfb xorg-x11-xauth util-linux >/dev/null
|
| 20 |
+
elif command -v pacman >/dev/null; then pacman -S --needed --noconfirm xorg-server-xvfb xorg-xauth >/dev/null
|
| 21 |
+
elif command -v zypper >/dev/null; then zypper --non-interactive install --no-recommends xvfb-run xauth gawk >/dev/null
|
| 22 |
+
fi
|
| 23 |
+
|
| 24 |
+
passo "Usuário comum: instalação sem pacotes do sistema"
|
| 25 |
+
useradd -m ana
|
| 26 |
+
su - ana -c "bash $INSTALADOR --fonte /fonte --sem-ollama --sem-sistema" | tail -4
|
| 27 |
+
su - ana -c 'ls -la ~/.local/bin/ && head -3 ~/.local/share/applications/opentars.desktop && grep -E "^Exec=" ~/.local/share/applications/opentars.desktop'
|
| 28 |
+
su - ana -c 'grep -n "DIR_OPENTARS=\|^PYTHON=\|--chat" ~/.local/bin/opentars-gui'
|
| 29 |
+
|
| 30 |
+
passo "Python, PyGObject/AT-SPI e Qt no ambiente instalado"
|
| 31 |
+
su - ana -c '~/.local/share/opentars-app/venv/bin/python3 --version'
|
| 32 |
+
su - ana -c '~/.local/share/opentars-app/venv/bin/python3 -c "import gi; gi.require_version(\"Atspi\", \"2.0\"); from gi.repository import Atspi; print(\"atspi ok\")"'
|
| 33 |
+
su - ana -c 'cd ~/.local/share/opentars-app/app && QT_QPA_PLATFORM=offscreen ~/.local/share/opentars-app/venv/bin/python3 -c "import tars_qt.principal; print(\"qt ok\")"'
|
| 34 |
+
passo "Bibliotecas que o plugin xcb do Qt não achou (vazio = todas presentes)"
|
| 35 |
+
su - ana -c 'ldd ~/.local/share/opentars-app/venv/lib/python3*/site-packages/PySide6/Qt/plugins/platforms/libqxcb.so | grep "not found" || true'
|
| 36 |
+
|
| 37 |
+
passo "Diagnóstico pelo comando instalado"
|
| 38 |
+
su - ana -c '~/.local/bin/opentars --diagnostico' > /tmp/diag.txt 2>&1 || true
|
| 39 |
+
tail -25 /tmp/diag.txt
|
| 40 |
+
su - ana -c 'test -f ~/opentars-autoteste.txt && echo "relatório salvo"'
|
| 41 |
+
|
| 42 |
+
passo "Dicas de instalação com o gerenciador daqui"
|
| 43 |
+
su - ana -c 'cd ~/.local/share/opentars-app/app && ~/.local/share/opentars-app/venv/bin/python3 -c "import tars_plataforma as p; print(p.comando_instalar(\"python3-gi\", \"gir1.2-atspi-2.0\", \"python3-tk\", \"poppler-utils\"))"'
|
| 44 |
+
|
| 45 |
+
passo "Testes do app no ambiente instalado"
|
| 46 |
+
for t in test_plataforma test_shell_portatil test_probes_servico test_acessibilidade_outros_sistemas test_atalhos_outros_sistemas; do
|
| 47 |
+
su - ana -c "cd ~/.local/share/opentars-app/app/tests && ~/.local/share/opentars-app/venv/bin/python3 $t.py" 2>&1 | tail -1
|
| 48 |
+
done
|
| 49 |
+
|
| 50 |
+
passo "A janela de verdade abre (opentars-gui num X virtual por 25 s)"
|
| 51 |
+
codigo=0
|
| 52 |
+
su - ana -c 'timeout 25 xvfb-run -a ~/.local/bin/opentars-gui' > /tmp/gui.txt 2>&1 || codigo=$?
|
| 53 |
+
echo "código de saída: $codigo (124 = continuou aberta até o timeout)"
|
| 54 |
+
tail -5 /tmp/gui.txt
|
| 55 |
+
if grep -q "Aborted\|Crashed\|could not load the Qt platform plugin" /tmp/gui.txt; then
|
| 56 |
+
echo "FALHOU: a janela Qt não abriu (o app caiu para a janela simples)"; exit 1
|
| 57 |
+
fi
|
| 58 |
+
[ "$codigo" = 124 ] || { echo "FALHOU: a janela fechou sozinha"; exit 1; }
|
| 59 |
+
su - ana -c 'grep -il "traceback" ~/.tars_log/*.log 2>/dev/null && tail -20 ~/.tars_log/qt.log || echo "sem traceback nos logs"'
|
| 60 |
+
|
| 61 |
+
passo "Remoção"
|
| 62 |
+
su - ana -c "bash $INSTALADOR --remover" | tail -1
|
| 63 |
+
su - ana -c 'test ! -e ~/.local/share/opentars-app && test ! -e ~/.local/bin/opentars-gui && test ! -e ~/.local/share/applications/opentars.desktop && echo "removido"'
|
| 64 |
+
echo "FIM OK"
|
app/empacotamento/macos/instalar.sh
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# openTARS para macOS (5.2, experimental): instala sem senha de administrador, só na pasta do usuário.
|
| 3 |
+
#
|
| 4 |
+
# curl -fsSL https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/macos/instalar.sh | bash
|
| 5 |
+
#
|
| 6 |
+
# O que faz: baixa o código do app (pasta app/ do repositório), instala o uv (traz o Python), cria um ambiente Python com
|
| 7 |
+
# as dependências, instala o Ollama se faltar (o app oficial, em ~/Applications), monta o openTARS.app em ~/Applications e
|
| 8 |
+
# o assina ad-hoc (grátis, sem conta da Apple; um app montado no próprio Mac não ganha a marca de quarentena), e cria os
|
| 9 |
+
# comandos opentars e opentars-gui em ~/.local/bin. O modelo (Gargantua 2) é baixado na primeira abertura, com barra.
|
| 10 |
+
# Rodar de novo atualiza. Remover: o mesmo comando com "| bash -s -- --remover".
|
| 11 |
+
# Suas conversas e configurações (em ~/Library/Application Support/opentars) ficam; apague a pasta se quiser.
|
| 12 |
+
set -euo pipefail
|
| 13 |
+
|
| 14 |
+
PASTA="$HOME/Library/Application Support/openTARS"
|
| 15 |
+
APP_CODIGO="$PASTA/app"
|
| 16 |
+
VENV="$PASTA/venv"
|
| 17 |
+
BIN="$HOME/.local/bin"
|
| 18 |
+
APP_MAC="$HOME/Applications/openTARS.app"
|
| 19 |
+
ZIP="https://github.com/project-opentars/OpenTARS/archive/refs/heads/main.zip"
|
| 20 |
+
FONTE="" # --fonte PASTA: a pasta app/ local em vez de baixar (o CI usa)
|
| 21 |
+
SEM_OLLAMA=0 # --sem-ollama: não instala o Ollama (o CI usa)
|
| 22 |
+
REMOVER=0
|
| 23 |
+
while [ $# -gt 0 ]; do
|
| 24 |
+
case "$1" in
|
| 25 |
+
--remover) REMOVER=1 ;;
|
| 26 |
+
--fonte) FONTE="$2"; shift ;;
|
| 27 |
+
--sem-ollama) SEM_OLLAMA=1 ;;
|
| 28 |
+
esac
|
| 29 |
+
shift
|
| 30 |
+
done
|
| 31 |
+
case "${LANG:-}" in pt*) PT=1 ;; *) PT=0 ;; esac
|
| 32 |
+
dizer() { if [ "$PT" = 1 ]; then echo "[openTARS] $1"; else echo "[openTARS] $2"; fi; }
|
| 33 |
+
|
| 34 |
+
if [ "$REMOVER" = 1 ]; then
|
| 35 |
+
rm -rf "$PASTA" "$APP_MAC" "$BIN/opentars" "$BIN/opentars-gui" "$HOME/Library/LaunchAgents/opentars-assistente.plist"
|
| 36 |
+
for arq in "$HOME/.zprofile" "$HOME/.zshrc" "$HOME/.bash_profile"; do # tira as 2 linhas que o instalador pôs no PATH
|
| 37 |
+
if grep -qF "# openTARS (comandos opentars e opentars-gui)" "$arq" 2>/dev/null; then
|
| 38 |
+
grep -vF -e "# openTARS (comandos opentars e opentars-gui)" -e 'export PATH="$HOME/.local/bin:$PATH"' "$arq" > "$arq.novo" && mv "$arq.novo" "$arq" || true
|
| 39 |
+
fi
|
| 40 |
+
done
|
| 41 |
+
dizer "Removido. Suas conversas e configurações ficaram em ~/Library/Application Support/opentars; o Ollama e os modelos também." \
|
| 42 |
+
"Removed. Your chats and settings stay in ~/Library/Application Support/opentars; Ollama and the models stay too."
|
| 43 |
+
exit 0
|
| 44 |
+
fi
|
| 45 |
+
|
| 46 |
+
dizer "Instalando em $PASTA (sem senha de administrador)." "Installing into $PASTA (no administrator password)."
|
| 47 |
+
mkdir -p "$PASTA" "$BIN" "$HOME/Applications"
|
| 48 |
+
|
| 49 |
+
# 1. O código do app
|
| 50 |
+
TEMP="$(mktemp -d)"
|
| 51 |
+
trap 'rm -rf "$TEMP"' EXIT
|
| 52 |
+
if [ -n "$FONTE" ]; then
|
| 53 |
+
ORIGEM="$(cd "$FONTE" && pwd)"
|
| 54 |
+
else
|
| 55 |
+
dizer "Baixando o openTARS..." "Downloading openTARS..."
|
| 56 |
+
curl -fsSL "$ZIP" -o "$TEMP/opentars.zip"
|
| 57 |
+
unzip -q "$TEMP/opentars.zip" -d "$TEMP"
|
| 58 |
+
ORIGEM="$TEMP/OpenTARS-main/app"
|
| 59 |
+
fi
|
| 60 |
+
[ -f "$ORIGEM/tars.py" ] || { echo "tars.py not found in $ORIGEM" >&2; exit 1; }
|
| 61 |
+
rm -rf "$APP_CODIGO"
|
| 62 |
+
cp -R "$ORIGEM" "$APP_CODIGO"
|
| 63 |
+
touch "$APP_CODIGO/.instalado-pelo-script" # a hora da instalação: o app avisa do lançamento seguinte (tars_atualizacao.py)
|
| 64 |
+
|
| 65 |
+
# 2. O Python (pelo uv) e as dependências
|
| 66 |
+
UV="$(command -v uv || true)"
|
| 67 |
+
if [ -z "$UV" ]; then
|
| 68 |
+
dizer "Instalando o uv (traz o Python, sem senha)..." "Installing uv (brings Python, no password)..."
|
| 69 |
+
curl -LsSf https://astral.sh/uv/install.sh | env UV_NO_MODIFY_PATH=1 sh
|
| 70 |
+
UV="$HOME/.local/bin/uv"
|
| 71 |
+
fi
|
| 72 |
+
[ -x "$UV" ] || { echo "uv not found" >&2; exit 1; }
|
| 73 |
+
dizer "Preparando o Python e as dependências (alguns minutos na primeira vez)..." \
|
| 74 |
+
"Setting up Python and the dependencies (a few minutes the first time)..."
|
| 75 |
+
[ -x "$VENV/bin/python3" ] || "$UV" venv --python 3.12 "$VENV"
|
| 76 |
+
"$UV" pip install --python "$VENV/bin/python3" requests psutil pyautogui pillow PySide6-Essentials numpy onnxruntime pyobjc-framework-ApplicationServices pip
|
| 77 |
+
|
| 78 |
+
# 3. O Ollama (o app oficial). Sem ele o openTARS abre, mas não tem IA local.
|
| 79 |
+
if [ "$SEM_OLLAMA" = 0 ]; then
|
| 80 |
+
if command -v ollama >/dev/null 2>&1 || [ -d /Applications/Ollama.app ] || [ -d "$HOME/Applications/Ollama.app" ]; then
|
| 81 |
+
dizer "Ollama já instalado." "Ollama already installed."
|
| 82 |
+
else
|
| 83 |
+
dizer "Instalando o Ollama (o app oficial, em ~/Applications)..." "Installing Ollama (the official app, in ~/Applications)..."
|
| 84 |
+
curl -fL# https://ollama.com/download/Ollama-darwin.zip -o "$TEMP/ollama.zip" # com barra de andamento
|
| 85 |
+
unzip -q "$TEMP/ollama.zip" -d "$HOME/Applications"
|
| 86 |
+
fi
|
| 87 |
+
open -a Ollama >/dev/null 2>&1 || open "$HOME/Applications/Ollama.app" >/dev/null 2>&1 || true
|
| 88 |
+
fi
|
| 89 |
+
|
| 90 |
+
# 4. O openTARS.app (um lançador que abre a janela), assinado ad-hoc, e os comandos
|
| 91 |
+
rm -rf "$APP_MAC"
|
| 92 |
+
mkdir -p "$APP_MAC/Contents/MacOS" "$APP_MAC/Contents/Resources"
|
| 93 |
+
cp "$APP_CODIGO/empacotamento/macos/opentars.icns" "$APP_MAC/Contents/Resources/opentars.icns" 2>/dev/null || true
|
| 94 |
+
cat > "$APP_MAC/Contents/Info.plist" <<PLIST
|
| 95 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 96 |
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
| 97 |
+
<plist version="1.0"><dict>
|
| 98 |
+
<key>CFBundleName</key><string>openTARS</string>
|
| 99 |
+
<key>CFBundleDisplayName</key><string>openTARS</string>
|
| 100 |
+
<key>CFBundleIdentifier</key><string>io.github.project-opentars.opentars</string>
|
| 101 |
+
<key>CFBundleExecutable</key><string>openTARS</string>
|
| 102 |
+
<key>CFBundleIconFile</key><string>opentars</string>
|
| 103 |
+
<key>CFBundlePackageType</key><string>APPL</string>
|
| 104 |
+
<key>CFBundleShortVersionString</key><string>5.2</string>
|
| 105 |
+
<key>LSMinimumSystemVersion</key><string>12.0</string>
|
| 106 |
+
<key>NSHighResolutionCapable</key><true/>
|
| 107 |
+
<key>NSMicrophoneUsageDescription</key><string>openTARS listens for your voice requests when you turn the voice on. The audio stays on this Mac.</string>
|
| 108 |
+
</dict></plist>
|
| 109 |
+
PLIST
|
| 110 |
+
cat > "$APP_MAC/Contents/MacOS/openTARS" <<LANCADOR
|
| 111 |
+
#!/bin/bash
|
| 112 |
+
cd "$APP_CODIGO" && exec "$VENV/bin/python3" -m tars_qt "\$@"
|
| 113 |
+
LANCADOR
|
| 114 |
+
chmod +x "$APP_MAC/Contents/MacOS/openTARS"
|
| 115 |
+
codesign --force --deep -s - "$APP_MAC" >/dev/null 2>&1 || dizer "Aviso: não consegui assinar o app (codesign)." "Warning: could not sign the app (codesign)."
|
| 116 |
+
|
| 117 |
+
printf '#!/bin/bash\nexec "%s/bin/python3" "%s/tars.py" "$@"\n' "$VENV" "$APP_CODIGO" > "$BIN/opentars"
|
| 118 |
+
printf '#!/bin/bash\ncd "%s" && exec "%s/bin/python3" -m tars_qt "$@"\n' "$APP_CODIGO" "$VENV" > "$BIN/opentars-gui"
|
| 119 |
+
chmod +x "$BIN/opentars" "$BIN/opentars-gui"
|
| 120 |
+
|
| 121 |
+
dizer "Pronto. Abra o openTARS em ~/Applications (na primeira vez ele baixa o Gargantua 2, com barra)." \
|
| 122 |
+
"Done. Open openTARS from ~/Applications (the first time it downloads Gargantua 2, with a progress bar)."
|
| 123 |
+
dizer "O macOS vai pedir Acessibilidade e Gravação de Tela para o openTARS clicar e ver a tela: libere em Ajustes do Sistema > Privacidade e Segurança." \
|
| 124 |
+
"macOS will ask for Accessibility and Screen Recording so openTARS can click and see the screen: allow it in System Settings > Privacy & Security."
|
| 125 |
+
# o Terminal do macOS (zsh) não tem ~/.local/bin no PATH: sem isto, "opentars" dá "command not found". Uma linha marcada,
|
| 126 |
+
# nos arquivos que o zsh e o bash do Mac leem ao abrir um terminal; o --remover tira.
|
| 127 |
+
MARCA_PATH="# openTARS (comandos opentars e opentars-gui)"
|
| 128 |
+
for arq in "$HOME/.zprofile" "$HOME/.zshrc" "$HOME/.bash_profile"; do
|
| 129 |
+
[ "$arq" = "$HOME/.bash_profile" ] && [ ! -f "$arq" ] && continue
|
| 130 |
+
grep -qF "$MARCA_PATH" "$arq" 2>/dev/null || printf '\n%s\nexport PATH="$HOME/.local/bin:$PATH"\n' "$MARCA_PATH" >> "$arq"
|
| 131 |
+
done
|
| 132 |
+
export PATH="$BIN:$PATH"
|
| 133 |
+
dizer "Os comandos opentars e opentars-gui ficaram em $BIN (já no PATH dos seus terminais novos: abra um Terminal novo)." \
|
| 134 |
+
"The opentars and opentars-gui commands are in $BIN (already on the PATH of new terminals: open a new Terminal)."
|
| 135 |
+
dizer "Para conferir e medir: '$BIN/opentars --diagnostico' e '$BIN/opentars --prova'; mande os relatórios que eles salvam." \
|
| 136 |
+
"To check and measure: '$BIN/opentars --diagnostico' and '$BIN/opentars --prova'; send the reports they save."
|
app/empacotamento/macos/opentars.icns
ADDED
|
Binary file (68.9 kB). View file
|
|
|
app/empacotamento/setup.sh
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Configuração do openTARS: instala o que falta pra ele rodar (Ollama,
|
| 3 |
+
# ambiente Python isolado com as dependências, modelos do Ollama; nenhum
|
| 4 |
+
# ajudante desde a 3.0.5: a helper Murph vem no pacote; desde a 3.1, usa as
|
| 5 |
+
# IAs que outros programas já têm; desde a 4.0, baixa o Gargantua, a IA
|
| 6 |
+
# oficial; na Endurance Neo, nada de modelo de embeddings) e NUNCA reinstala
|
| 7 |
+
# algo que já está presente no PC.
|
| 8 |
+
# Roda automaticamente depois do "apt install" (chamado pelo postinst)
|
| 9 |
+
# e pode ser rodado de novo a qualquer momento com "opentars --setup".
|
| 10 |
+
#
|
| 11 |
+
# De propósito, NUNCA sai com erro: se o dpkg visse esse script falhar,
|
| 12 |
+
# deixaria o pacote marcado como "quebrado" mesmo com o openTARS
|
| 13 |
+
# utilizável. Cada etapa arriscada (rede, permissões) avisa e segue.
|
| 14 |
+
|
| 15 |
+
set -uo pipefail
|
| 16 |
+
|
| 17 |
+
# Ajudantes das versões antigas (não são mais baixados nem usados): se já
|
| 18 |
+
# estiverem instalados, só não contam como modelo de conversa.
|
| 19 |
+
MODELO_AJUDANTE="qwen2.5:0.5b"
|
| 20 |
+
MODELO_AJUDANTE_ANTIGO="gemma3:270m"
|
| 21 |
+
DIR_OPENTARS="/usr/share/opentars"
|
| 22 |
+
VENV="$DIR_OPENTARS/venv"
|
| 23 |
+
DEPENDENCIAS=("requests:requests" "psutil:psutil" "pyautogui:pyautogui" "PIL:pillow" "PySide6:PySide6-Essentials" "numpy:numpy" "onnxruntime:onnxruntime")
|
| 24 |
+
|
| 25 |
+
# Textos no idioma do sistema: vêm de idiomas/*.json, pelo mesmo módulo
|
| 26 |
+
# que o openTARS usa (tars_i18n.py). Se algo falhar, aparecem as chaves
|
| 27 |
+
# em vez das frases — a instalação nunca quebra por causa disso.
|
| 28 |
+
eval "$(python3 "$DIR_OPENTARS/tars_i18n.py" --shell setup. 2>/dev/null)" 2>/dev/null || true
|
| 29 |
+
|
| 30 |
+
# t chave [campo=valor ...] -> frase do idioma, com os {campos} preenchidos
|
| 31 |
+
t() {
|
| 32 |
+
local var="T_setup_$1" texto par
|
| 33 |
+
texto="${!var:-$1}"
|
| 34 |
+
shift
|
| 35 |
+
for par in "$@"; do
|
| 36 |
+
texto="${texto//"{${par%%=*}}"/${par#*=}}"
|
| 37 |
+
done
|
| 38 |
+
printf '%s' "$texto"
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
msg() { echo "[openTARS] $*"; }
|
| 42 |
+
aviso() { echo "[openTARS] $(t aviso): $*"; }
|
| 43 |
+
|
| 44 |
+
echo ""
|
| 45 |
+
echo "$(t titulo)"
|
| 46 |
+
echo ""
|
| 47 |
+
|
| 48 |
+
OLLAMA_URL="http://127.0.0.1:11434"
|
| 49 |
+
# Respeita OLLAMA_HOST (o mesmo do próprio Ollama): "0.0.0.0", "host:porta" ou URL
|
| 50 |
+
if [ -n "${OLLAMA_HOST:-}" ]; then
|
| 51 |
+
OLLAMA_URL="$OLLAMA_HOST"
|
| 52 |
+
case "$OLLAMA_URL" in *://*) ;; *) OLLAMA_URL="http://$OLLAMA_URL" ;; esac
|
| 53 |
+
case "${OLLAMA_URL#*://}" in *:*) ;; *) OLLAMA_URL="$OLLAMA_URL:11434" ;; esac
|
| 54 |
+
OLLAMA_URL="${OLLAMA_URL/\/\/0.0.0.0/\/\/127.0.0.1}"
|
| 55 |
+
fi
|
| 56 |
+
|
| 57 |
+
ollama_responde() {
|
| 58 |
+
curl -fsS --max-time 3 "$OLLAMA_URL/api/version" >/dev/null 2>&1
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
# 4.5: WSL. O Ollama costuma ficar no Windows, que o WSL2 alcança pelo IP dele
|
| 62 |
+
# (servidor DNS e gateway do WSL), não pelo 127.0.0.1.
|
| 63 |
+
em_wsl() {
|
| 64 |
+
grep -qi microsoft /proc/version 2>/dev/null || [ -n "${WSL_DISTRO_NAME:-}" ]
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
ollama_do_windows() {
|
| 68 |
+
local ip
|
| 69 |
+
for ip in $(awk '/^nameserver/ {print $2}' /etc/resolv.conf 2>/dev/null) $(ip route 2>/dev/null | awk '/^default/ {print $3}'); do
|
| 70 |
+
case "$ip" in 127.*|"") continue ;; esac
|
| 71 |
+
if curl -fsS --max-time 2 "http://$ip:11434/api/version" >/dev/null 2>&1; then
|
| 72 |
+
echo "http://$ip:11434"
|
| 73 |
+
return 0
|
| 74 |
+
fi
|
| 75 |
+
done
|
| 76 |
+
return 1
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
if em_wsl; then
|
| 80 |
+
msg "$(t wsl_detectado)"
|
| 81 |
+
if [ -z "${OLLAMA_HOST:-}" ] && ! ollama_responde && windows_url="$(ollama_do_windows)"; then
|
| 82 |
+
OLLAMA_URL="$windows_url"
|
| 83 |
+
msg "$(t ollama_windows url="$OLLAMA_URL")"
|
| 84 |
+
fi
|
| 85 |
+
fi
|
| 86 |
+
# O comando "ollama" (pull) fala com o mesmo servidor que o resto deste script
|
| 87 |
+
export OLLAMA_HOST="${OLLAMA_URL#*://}"
|
| 88 |
+
|
| 89 |
+
# Nomes dos modelos baixados, um por linha (via API: funciona mesmo com
|
| 90 |
+
# o Ollama rodando em Docker, sem o comando "ollama" no PC).
|
| 91 |
+
modelos_instalados() {
|
| 92 |
+
curl -fsS --max-time 5 "$OLLAMA_URL/api/tags" 2>/dev/null \
|
| 93 |
+
| grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
# ------------------------------------------------------------------
|
| 97 |
+
# 1. Ollama — só instala se ainda não existir.
|
| 98 |
+
#
|
| 99 |
+
# Um Ollama que já responde na porta padrão (instalado de outro jeito,
|
| 100 |
+
# em Docker, via Snap...) conta como instalado: instalar outro por cima
|
| 101 |
+
# criaria um segundo serviço brigando pela mesma porta.
|
| 102 |
+
# ------------------------------------------------------------------
|
| 103 |
+
if command -v ollama >/dev/null 2>&1; then
|
| 104 |
+
msg "$(t ollama_ja)"
|
| 105 |
+
elif ollama_responde; then
|
| 106 |
+
msg "$(t ollama_existente url="$OLLAMA_URL")"
|
| 107 |
+
else
|
| 108 |
+
msg "$(t ollama_instalando)"
|
| 109 |
+
# Baixa pro disco e só então executa: com "curl | sh" o status do
|
| 110 |
+
# pipe é o do "sh", que "funciona" mesmo se o download falhar.
|
| 111 |
+
instalador="$(mktemp)"
|
| 112 |
+
if curl -fsSL https://ollama.com/install.sh -o "$instalador" && sh "$instalador"; then
|
| 113 |
+
msg "$(t ollama_ok)"
|
| 114 |
+
else
|
| 115 |
+
aviso "$(t ollama_falhou)"
|
| 116 |
+
echo " $(t ollama_manual)"
|
| 117 |
+
fi
|
| 118 |
+
rm -f "$instalador"
|
| 119 |
+
fi
|
| 120 |
+
|
| 121 |
+
# ------------------------------------------------------------------
|
| 122 |
+
# 2. Ambiente Python isolado.
|
| 123 |
+
#
|
| 124 |
+
# Um venv próprio evita o conflito do pyautogui com o setuptools do
|
| 125 |
+
# sistema em distros recentes (Ubuntu 24.04+, Zorin 17+).
|
| 126 |
+
# --system-site-packages deixa o venv enxergar o tkinter, que só existe
|
| 127 |
+
# como pacote do sistema (python3-tk), nunca via pip.
|
| 128 |
+
#
|
| 129 |
+
# Se o venv existe mas o Python dele não roda mais (ex: atualização da
|
| 130 |
+
# distro trocou a versão do Python), ele é recriado do zero.
|
| 131 |
+
# ------------------------------------------------------------------
|
| 132 |
+
# Escolhe o Python base: o "python3" padrão, a menos que ele não tenha
|
| 133 |
+
# tkinter e outro python3.X instalado tenha (acontece quando o python3
|
| 134 |
+
# do PATH foi trocado e o pacote python3-tk é da versão padrão da distro).
|
| 135 |
+
escolher_python() {
|
| 136 |
+
local candidato
|
| 137 |
+
for candidato in python3 /usr/bin/python3 $(ls /usr/bin/python3.[0-9]* 2>/dev/null | grep -E 'python3\.[0-9]+$' | sort -t. -k2 -n -r); do
|
| 138 |
+
command -v "$candidato" >/dev/null 2>&1 || continue
|
| 139 |
+
"$candidato" -c "import sys; sys.exit(0 if sys.version_info >= (3, 8) else 1)" 2>/dev/null || continue
|
| 140 |
+
"$candidato" -c "import venv, tkinter" >/dev/null 2>&1 && { echo "$candidato"; return; }
|
| 141 |
+
done
|
| 142 |
+
echo python3
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
venv_ok() {
|
| 146 |
+
[ -x "$VENV/bin/python3" ] && "$VENV/bin/python3" -c "pass" >/dev/null 2>&1
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
# Venv criado com um Python sem tkinter enquanto existe outro com tkinter
|
| 150 |
+
# (ex: python3-tk instalado depois): recria pra liberar a interface gráfica.
|
| 151 |
+
PYTHON_BASE="$(escolher_python)"
|
| 152 |
+
if venv_ok && ! "$VENV/bin/python3" -c "import tkinter" >/dev/null 2>&1 \
|
| 153 |
+
&& "$PYTHON_BASE" -c "import tkinter" >/dev/null 2>&1; then
|
| 154 |
+
msg "$(t venv_sem_tk python="$PYTHON_BASE")"
|
| 155 |
+
rm -rf "$VENV"
|
| 156 |
+
fi
|
| 157 |
+
|
| 158 |
+
if venv_ok; then
|
| 159 |
+
msg "$(t venv_ja)"
|
| 160 |
+
else
|
| 161 |
+
[ -e "$VENV" ] && msg "$(t venv_quebrado)"
|
| 162 |
+
rm -rf "$VENV"
|
| 163 |
+
msg "$(t venv_criando versao="$("$PYTHON_BASE" --version 2>&1)")"
|
| 164 |
+
if "$PYTHON_BASE" -m venv --system-site-packages "$VENV"; then
|
| 165 |
+
"$VENV/bin/pip" install --quiet --upgrade pip setuptools wheel \
|
| 166 |
+
|| aviso "$(t pip_falhou)"
|
| 167 |
+
msg "$(t venv_ok)"
|
| 168 |
+
else
|
| 169 |
+
aviso "$(t venv_falhou)"
|
| 170 |
+
rm -rf "$VENV"
|
| 171 |
+
fi
|
| 172 |
+
fi
|
| 173 |
+
|
| 174 |
+
if [ -x "$VENV/bin/python3" ]; then
|
| 175 |
+
msg "$(t deps_verificando)"
|
| 176 |
+
|
| 177 |
+
faltando=()
|
| 178 |
+
for par in "${DEPENDENCIAS[@]}"; do
|
| 179 |
+
modulo="${par%%:*}"
|
| 180 |
+
pacote="${par##*:}"
|
| 181 |
+
# find_spec só checa se o módulo existe, sem executá-lo. Um
|
| 182 |
+
# "import" real do pyautogui lê $DISPLAY na hora e dá KeyError
|
| 183 |
+
# sem sessão gráfica (como durante o próprio postinst).
|
| 184 |
+
if ! "$VENV/bin/python3" -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('$modulo') else 1)" >/dev/null 2>&1; then
|
| 185 |
+
faltando+=("$pacote")
|
| 186 |
+
fi
|
| 187 |
+
done
|
| 188 |
+
|
| 189 |
+
if [ "${#faltando[@]}" -eq 0 ]; then
|
| 190 |
+
msg "$(t deps_ok)"
|
| 191 |
+
else
|
| 192 |
+
msg "$(t deps_instalando pacotes="${faltando[*]}")"
|
| 193 |
+
if ! "$VENV/bin/pip" install --quiet "${faltando[@]}"; then
|
| 194 |
+
aviso "$(t deps_falhou)"
|
| 195 |
+
fi
|
| 196 |
+
fi
|
| 197 |
+
|
| 198 |
+
if "$VENV/bin/python3" -c "import tkinter" >/dev/null 2>&1; then
|
| 199 |
+
msg "$(t tk_ok)"
|
| 200 |
+
else
|
| 201 |
+
aviso "$(t tk_falta)"
|
| 202 |
+
echo " $(t tk_instale)"
|
| 203 |
+
echo " $(t tk_terminal)"
|
| 204 |
+
fi
|
| 205 |
+
|
| 206 |
+
# Clicar nos botões pelo nome (árvore de acessibilidade, AT-SPI).
|
| 207 |
+
if "$VENV/bin/python3" -c "import gi; gi.require_version('Atspi', '2.0'); from gi.repository import Atspi" >/dev/null 2>&1; then
|
| 208 |
+
msg "$(t acess_ok)"
|
| 209 |
+
else
|
| 210 |
+
aviso "$(t acess_falta)"
|
| 211 |
+
echo " $(t acess_instale)"
|
| 212 |
+
fi
|
| 213 |
+
else
|
| 214 |
+
aviso "$(t sem_venv)"
|
| 215 |
+
fi
|
| 216 |
+
|
| 217 |
+
# ------------------------------------------------------------------
|
| 218 |
+
# 3. Serviço do Ollama pronto (a helper Murph já vem no pacote).
|
| 219 |
+
# ------------------------------------------------------------------
|
| 220 |
+
servico_pronto=0
|
| 221 |
+
|
| 222 |
+
# Recém-instalado, o serviço leva um instante pra subir. Se o Ollama
|
| 223 |
+
# existe mas o serviço está parado (sem systemd, por exemplo), tenta
|
| 224 |
+
# iniciar.
|
| 225 |
+
if ! ollama_responde && command -v systemctl >/dev/null 2>&1 \
|
| 226 |
+
&& systemctl list-unit-files ollama.service >/dev/null 2>&1; then
|
| 227 |
+
systemctl start ollama >/dev/null 2>&1 || true
|
| 228 |
+
fi
|
| 229 |
+
|
| 230 |
+
for _ in $(seq 1 10); do
|
| 231 |
+
if ollama_responde; then
|
| 232 |
+
servico_pronto=1
|
| 233 |
+
break
|
| 234 |
+
fi
|
| 235 |
+
sleep 2
|
| 236 |
+
done
|
| 237 |
+
|
| 238 |
+
# 3.0.5: nenhum modelo ajudante é baixado. Quem decide o tipo de cada
|
| 239 |
+
# pedido é a helper Murph, que já vem no pacote (modelos/murph.json).
|
| 240 |
+
msg "$(t helper_murph versao="1.0")"
|
| 241 |
+
if [ "$servico_pronto" -eq 0 ]; then
|
| 242 |
+
aviso "$(t ollama_nao_respondeu url="$OLLAMA_URL")"
|
| 243 |
+
# 4.5: WSL (e contêiner) costuma não ter systemd: o serviço não sobe sozinho
|
| 244 |
+
if em_wsl || ! command -v systemctl >/dev/null 2>&1; then
|
| 245 |
+
echo " $(t ollama_serve_manual)"
|
| 246 |
+
fi
|
| 247 |
+
fi
|
| 248 |
+
|
| 249 |
+
# ------------------------------------------------------------------
|
| 250 |
+
# 3d. Gargantua (4.0): a IA oficial do openTARS, treinada pra usar as ferramentas
|
| 251 |
+
# dele. Desde 18/10 é o Gargantua 2 (Qwen3.5 2B, ~1,6 GB, enxerga a tela: o Cooper,
|
| 252 |
+
# modelo à parte, foi descontinuado). Baixa só se ainda não tiver.
|
| 253 |
+
# Com ele instalado, o passo 4 não baixa outro modelo de conversa.
|
| 254 |
+
# TARS_SEM_GARGANTUA=1 pula; TARS_MODELO_GARGANTUA=<nome> troca.
|
| 255 |
+
# ------------------------------------------------------------------
|
| 256 |
+
MODELO_GARGANTUA="${TARS_MODELO_GARGANTUA:-ProjectOpenTARS/Gargantua-2}"
|
| 257 |
+
|
| 258 |
+
# 5.1: máquina fraca (sem placa NVIDIA com 4 GB E com até 6 GB de RAM OU menos de 4 threads) recebe o Gargantua Lite
|
| 259 |
+
# (Qwen3.5 0,8B com visão, 0,6 GB, Gargantua-2:lite). TARS_GARGANTUA=lite|completo força. A mesma regra do primeiro uso (tars_primeiro_uso.py).
|
| 260 |
+
maquina_fraca() {
|
| 261 |
+
case "${TARS_GARGANTUA:-}" in lite) return 0 ;; completo) return 1 ;; esac
|
| 262 |
+
local vram=0 ram threads
|
| 263 |
+
if command -v nvidia-smi >/dev/null 2>&1; then
|
| 264 |
+
vram="$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null | sort -n | tail -1 | cut -d. -f1)"
|
| 265 |
+
fi
|
| 266 |
+
[ "${vram:-0}" -ge 4000 ] 2>/dev/null && return 1
|
| 267 |
+
ram="$(awk '/^MemTotal:/ {print int($2/1024)}' /proc/meminfo 2>/dev/null)"
|
| 268 |
+
threads="$(nproc 2>/dev/null || echo 4)"
|
| 269 |
+
[ "${ram:-99999}" -le 6200 ] || [ "${threads:-4}" -lt 4 ]
|
| 270 |
+
}
|
| 271 |
+
if [ -z "${TARS_MODELO_GARGANTUA:-}" ] && maquina_fraca; then
|
| 272 |
+
MODELO_GARGANTUA="ProjectOpenTARS/Gargantua-2:lite"
|
| 273 |
+
fi
|
| 274 |
+
|
| 275 |
+
gargantua_instalado() {
|
| 276 |
+
# Qualquer "gargantua" conta (o oficial ou um treinado no próprio PC).
|
| 277 |
+
modelos_instalados | awk -F/ '{print tolower($NF)}' | grep -q '^gargantua'
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
if [ "$servico_pronto" -eq 1 ]; then
|
| 281 |
+
if [ "${TARS_SEM_GARGANTUA:-0}" = "1" ]; then
|
| 282 |
+
msg "$(t gargantua_pulado)"
|
| 283 |
+
elif gargantua_instalado; then
|
| 284 |
+
msg "$(t gargantua_ja modelo="$(modelos_instalados | grep -i 'gargantua' | head -1)")"
|
| 285 |
+
else
|
| 286 |
+
msg "$(t gargantua_baixando modelo="$MODELO_GARGANTUA")"
|
| 287 |
+
if [ -t 1 ]; then
|
| 288 |
+
# num terminal ("dpkg -i", "apt install", "opentars --setup"): baixa aqui, com a barra do Ollama
|
| 289 |
+
msg "$(t pode_demorar)"
|
| 290 |
+
if command -v ollama >/dev/null 2>&1; then
|
| 291 |
+
ollama pull "$MODELO_GARGANTUA" || true
|
| 292 |
+
else
|
| 293 |
+
curl -fsS --max-time 7200 "$OLLAMA_URL/api/pull" \
|
| 294 |
+
-d "{\"model\":\"$MODELO_GARGANTUA\",\"stream\":false}" >/dev/null || true
|
| 295 |
+
fi
|
| 296 |
+
if gargantua_instalado; then
|
| 297 |
+
msg "$(t baixado modelo="$MODELO_GARGANTUA")"
|
| 298 |
+
else
|
| 299 |
+
aviso "$(t nao_baixou modelo="$MODELO_GARGANTUA")"
|
| 300 |
+
fi
|
| 301 |
+
else
|
| 302 |
+
# SEM terminal (loja de aplicativos, instalação automática, atualização pelo próprio openTARS): um pull aqui
|
| 303 |
+
# segura a instalação por minutos sem mostrar nada, e a barra da loja fica parada em 0% enquanto o
|
| 304 |
+
# Ollama já está em 50%. Baixa em segundo plano, solto da instalação; o assistente de primeiro uso do
|
| 305 |
+
# openTARS acompanha o mesmo download (o Ollama junta os pedidos) e mostra a barra de verdade.
|
| 306 |
+
msg "$(t gargantua_segundo_plano)"
|
| 307 |
+
if command -v ollama >/dev/null 2>&1; then
|
| 308 |
+
( setsid nohup ollama pull "$MODELO_GARGANTUA" >/dev/null 2>&1 < /dev/null & )
|
| 309 |
+
else
|
| 310 |
+
( setsid nohup curl -fsS --max-time 7200 "$OLLAMA_URL/api/pull" \
|
| 311 |
+
-d "{\"model\":\"$MODELO_GARGANTUA\",\"stream\":false}" >/dev/null 2>&1 < /dev/null & )
|
| 312 |
+
fi
|
| 313 |
+
fi
|
| 314 |
+
fi
|
| 315 |
+
fi
|
| 316 |
+
|
| 317 |
+
# ------------------------------------------------------------------
|
| 318 |
+
# 4. Modelo de conversa: sem nenhum, o openTARS abre mas não tem quem
|
| 319 |
+
# responda. Baixa UM, do tamanho certo pro PC, só se não houver
|
| 320 |
+
# nenhum ainda (quem já tem modelos escolheu os seus).
|
| 321 |
+
# TARS_MODELO_CONVERSA=<modelo> escolhe outro; TARS_SEM_MODELO=1 pula.
|
| 322 |
+
# ------------------------------------------------------------------
|
| 323 |
+
vram_gb() {
|
| 324 |
+
local total=0
|
| 325 |
+
if command -v nvidia-smi >/dev/null 2>&1; then
|
| 326 |
+
total=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null \
|
| 327 |
+
| awk '{s+=$1} END {printf "%d", s/1024}')
|
| 328 |
+
fi
|
| 329 |
+
if [ "${total:-0}" -eq 0 ]; then
|
| 330 |
+
for d in /sys/class/drm/card[0-9]*/device; do
|
| 331 |
+
[ "$(cat "$d/vendor" 2>/dev/null)" = "0x1002" ] || continue
|
| 332 |
+
local b; b=$(cat "$d/mem_info_vram_total" 2>/dev/null || echo 0)
|
| 333 |
+
[ "$b" -ge 2147483648 ] && total=$((total + b / 1073741824))
|
| 334 |
+
done
|
| 335 |
+
fi
|
| 336 |
+
echo "${total:-0}"
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
ram_gb() {
|
| 340 |
+
awk '/MemTotal/ {printf "%d", $2/1048576}' /proc/meminfo 2>/dev/null || echo 0
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
modelo_de_conversa_sugerido() {
|
| 344 |
+
local vram ram
|
| 345 |
+
vram=$(vram_gb); ram=$(ram_gb)
|
| 346 |
+
if [ "$vram" -ge 6 ]; then
|
| 347 |
+
echo "qwen3:8b" # ~5 GB, cabe na placa
|
| 348 |
+
elif [ "$ram" -ge 12 ]; then
|
| 349 |
+
echo "qwen3:4b" # ~2.5 GB, roda bem na CPU
|
| 350 |
+
else
|
| 351 |
+
echo "qwen3:1.7b" # ~1.4 GB, pra PC com pouca memória
|
| 352 |
+
fi
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
contar_modelos_de_conversa() {
|
| 356 |
+
modelos_instalados | grep -vx "$MODELO_AJUDANTE" | grep -vx "$MODELO_AJUDANTE_ANTIGO" \
|
| 357 |
+
| grep -viE 'embed|minilm|bge-|cooper' | wc -l
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
if [ "$servico_pronto" -eq 1 ]; then
|
| 361 |
+
outros=$(contar_modelos_de_conversa)
|
| 362 |
+
if [ "$outros" -gt 0 ]; then
|
| 363 |
+
msg "$(t ja_tem_modelos n="$outros")"
|
| 364 |
+
elif [ "${TARS_SEM_MODELO:-0}" = "1" ]; then
|
| 365 |
+
aviso "$(t sem_modelo_pedido)"
|
| 366 |
+
else
|
| 367 |
+
MODELO_CONVERSA="${TARS_MODELO_CONVERSA:-$(modelo_de_conversa_sugerido)}"
|
| 368 |
+
msg "$(t baixando_conversa modelo="$MODELO_CONVERSA" vram="$(vram_gb)" ram="$(ram_gb)")"
|
| 369 |
+
msg "$(t pode_demorar)"
|
| 370 |
+
if command -v ollama >/dev/null 2>&1; then
|
| 371 |
+
ollama pull "$MODELO_CONVERSA" || true
|
| 372 |
+
else
|
| 373 |
+
curl -fsS --max-time 7200 "$OLLAMA_URL/api/pull" \
|
| 374 |
+
-d "{\"model\":\"$MODELO_CONVERSA\",\"stream\":false}" >/dev/null || true
|
| 375 |
+
fi
|
| 376 |
+
if modelos_instalados | grep -qx "$MODELO_CONVERSA"; then
|
| 377 |
+
msg "$(t baixado modelo="$MODELO_CONVERSA")"
|
| 378 |
+
else
|
| 379 |
+
aviso "$(t nao_baixou modelo="$MODELO_CONVERSA")"
|
| 380 |
+
fi
|
| 381 |
+
fi
|
| 382 |
+
else
|
| 383 |
+
aviso "$(t sem_ollama_modelo)"
|
| 384 |
+
fi
|
| 385 |
+
|
| 386 |
+
echo ""
|
| 387 |
+
echo "$(t pronto)"
|
| 388 |
+
echo "$(t dica_atalho)"
|
| 389 |
+
echo ""
|
| 390 |
+
|
| 391 |
+
exit 0
|
app/empacotamento/windows/instalar.ps1
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# openTARS para Windows (5.2, experimental): instala sem administrador, só na pasta do usuário.
|
| 2 |
+
#
|
| 3 |
+
# irm https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/windows/instalar.ps1 | iex
|
| 4 |
+
#
|
| 5 |
+
# O que faz: baixa o código do app (pasta app/ do repositório), instala o uv (um programa que traz o Python), cria um
|
| 6 |
+
# ambiente Python com as dependências, instala o Ollama se faltar (o instalador oficial, por usuário), cria o atalho
|
| 7 |
+
# no Menu Iniciar e os comandos opentars e opentars-gui. O modelo (Gargantua 2) é baixado na primeira abertura, com barra.
|
| 8 |
+
# Rodar de novo atualiza. Remover:
|
| 9 |
+
# & ([scriptblock]::Create((irm https://raw.githubusercontent.com/project-opentars/OpenTARS/main/app/empacotamento/windows/instalar.ps1))) -Remover
|
| 10 |
+
# Suas conversas e configurações (em %APPDATA%\opentars) ficam; apague a pasta se quiser.
|
| 11 |
+
param(
|
| 12 |
+
[switch]$Remover,
|
| 13 |
+
[string]$Fonte = "", # pasta app/ local em vez de baixar (o CI usa)
|
| 14 |
+
[switch]$SemOllama # não instala o Ollama (o CI usa)
|
| 15 |
+
)
|
| 16 |
+
$ErrorActionPreference = "Stop"
|
| 17 |
+
$ProgressPreference = "SilentlyContinue" # a barra do Invoke-WebRequest deixa o download muito lento no 5.1
|
| 18 |
+
|
| 19 |
+
$Pasta = Join-Path $env:LOCALAPPDATA "openTARS"
|
| 20 |
+
$App = Join-Path $Pasta "app"
|
| 21 |
+
$Venv = Join-Path $Pasta "venv"
|
| 22 |
+
$Bin = Join-Path $Pasta "bin"
|
| 23 |
+
$MenuIniciar = Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs\openTARS.lnk"
|
| 24 |
+
$Inicializar = Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs\Startup\opentars-assistente.lnk"
|
| 25 |
+
$Zip = "https://github.com/project-opentars/OpenTARS/archive/refs/heads/main.zip"
|
| 26 |
+
$Pt = (Get-Culture).Name -like "pt*"
|
| 27 |
+
|
| 28 |
+
function Dizer($pt, $en) { if ($Pt) { Write-Host "[openTARS] $pt" } else { Write-Host "[openTARS] $en" } }
|
| 29 |
+
|
| 30 |
+
function Tirar-Do-Path {
|
| 31 |
+
$atual = [Environment]::GetEnvironmentVariable("Path", "User")
|
| 32 |
+
if ($atual) {
|
| 33 |
+
$novo = ($atual -split ";" | Where-Object { $_ -and ($_ -ne $Bin) }) -join ";"
|
| 34 |
+
[Environment]::SetEnvironmentVariable("Path", $novo, "User")
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
if ($Remover) {
|
| 39 |
+
Get-Process pythonw, python -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "$Venv*" } | Stop-Process -Force
|
| 40 |
+
Remove-Item -Recurse -Force $Pasta -ErrorAction SilentlyContinue
|
| 41 |
+
Remove-Item -Force $MenuIniciar, $Inicializar -ErrorAction SilentlyContinue
|
| 42 |
+
Tirar-Do-Path
|
| 43 |
+
Dizer "Removido. Suas conversas e configurações ficaram em $env:APPDATA\opentars; o Ollama e os modelos também ficaram." `
|
| 44 |
+
"Removed. Your chats and settings stay in $env:APPDATA\opentars; Ollama and the models stay too."
|
| 45 |
+
return
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
Dizer "Instalando em $Pasta (sem administrador)." "Installing into $Pasta (no administrator needed)."
|
| 49 |
+
New-Item -ItemType Directory -Force -Path $Pasta, $Bin | Out-Null
|
| 50 |
+
|
| 51 |
+
# 1. O código do app
|
| 52 |
+
$temp = Join-Path $env:TEMP ("opentars-" + [guid]::NewGuid().ToString("N"))
|
| 53 |
+
New-Item -ItemType Directory -Force -Path $temp | Out-Null
|
| 54 |
+
try {
|
| 55 |
+
if ($Fonte) {
|
| 56 |
+
$origem = (Resolve-Path $Fonte).Path
|
| 57 |
+
} else {
|
| 58 |
+
Dizer "Baixando o openTARS..." "Downloading openTARS..."
|
| 59 |
+
Invoke-WebRequest -UseBasicParsing -Uri $Zip -OutFile (Join-Path $temp "opentars.zip")
|
| 60 |
+
Expand-Archive -Path (Join-Path $temp "opentars.zip") -DestinationPath $temp -Force
|
| 61 |
+
$origem = Join-Path $temp "OpenTARS-main\app"
|
| 62 |
+
}
|
| 63 |
+
if (-not (Test-Path (Join-Path $origem "tars.py"))) { throw "tars.py not found in $origem" }
|
| 64 |
+
if (Test-Path $App) { Remove-Item -Recurse -Force $App }
|
| 65 |
+
Copy-Item -Recurse -Force $origem $App
|
| 66 |
+
# a hora da instalação: o app compara com a do lançamento seguinte para avisar (tars_atualizacao.py)
|
| 67 |
+
New-Item -ItemType File -Force -Path (Join-Path $App ".instalado-pelo-script") | Out-Null
|
| 68 |
+
} finally {
|
| 69 |
+
Remove-Item -Recurse -Force $temp -ErrorAction SilentlyContinue
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
# 2. O Python (pelo uv) e as dependências
|
| 73 |
+
$uv = Get-Command uv -ErrorAction SilentlyContinue
|
| 74 |
+
if (-not $uv) {
|
| 75 |
+
Dizer "Instalando o uv (traz o Python, sem administrador)..." "Installing uv (brings Python, no administrator)..."
|
| 76 |
+
$env:UV_NO_MODIFY_PATH = "1"
|
| 77 |
+
# num PowerShell filho, como a Astral manda: um "exit" do instalador dela não fecha esta janela
|
| 78 |
+
powershell -NoProfile -ExecutionPolicy ByPass -Command "irm https://astral.sh/uv/install.ps1 | iex"
|
| 79 |
+
$uvExe = @((Join-Path $env:USERPROFILE ".local\bin\uv.exe"), (Join-Path $env:USERPROFILE ".cargo\bin\uv.exe")) |
|
| 80 |
+
Where-Object { Test-Path $_ } | Select-Object -First 1
|
| 81 |
+
} else {
|
| 82 |
+
$uvExe = $uv.Source
|
| 83 |
+
}
|
| 84 |
+
if (-not $uvExe -or -not (Test-Path $uvExe)) { throw "uv not found" }
|
| 85 |
+
Dizer "Preparando o Python e as dependências (alguns minutos na primeira vez)..." "Setting up Python and the dependencies (a few minutes the first time)..."
|
| 86 |
+
if (-not (Test-Path (Join-Path $Venv "Scripts\python.exe"))) {
|
| 87 |
+
& $uvExe venv --python 3.12 $Venv
|
| 88 |
+
if ($LASTEXITCODE) { throw "uv venv failed ($LASTEXITCODE)" }
|
| 89 |
+
}
|
| 90 |
+
& $uvExe pip install --python (Join-Path $Venv "Scripts\python.exe") requests psutil pyautogui pillow PySide6-Essentials numpy onnxruntime uiautomation pip
|
| 91 |
+
if ($LASTEXITCODE) { throw "uv pip install failed ($LASTEXITCODE)" }
|
| 92 |
+
|
| 93 |
+
# 3. O Ollama (por usuário). Sem ele o openTARS abre, mas não tem IA local.
|
| 94 |
+
if (-not $SemOllama) {
|
| 95 |
+
$ollama = Get-Command ollama -ErrorAction SilentlyContinue
|
| 96 |
+
$ollamaExe = Join-Path $env:LOCALAPPDATA "Programs\Ollama\ollama.exe"
|
| 97 |
+
if (-not $ollama -and -not (Test-Path $ollamaExe)) {
|
| 98 |
+
Dizer "Baixando o Ollama (cerca de 1,5 GB: pode levar alguns minutos, a barra mostra o andamento)..." "Downloading Ollama (about 1.5 GB: it may take a few minutes, the bar shows the progress)..."
|
| 99 |
+
$setup = Join-Path $env:TEMP "OllamaSetup.exe"
|
| 100 |
+
$url = "https://ollama.com/download/OllamaSetup.exe"
|
| 101 |
+
# o curl.exe vem com o Windows 10 e 11 e mostra o andamento; o Invoke-WebRequest não mostra nada neste script
|
| 102 |
+
if (Get-Command curl.exe -ErrorAction SilentlyContinue) {
|
| 103 |
+
& curl.exe -L --fail --retry 3 --progress-bar -o $setup $url
|
| 104 |
+
if ($LASTEXITCODE) { throw "Ollama download failed ($LASTEXITCODE)" }
|
| 105 |
+
} else {
|
| 106 |
+
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $setup
|
| 107 |
+
}
|
| 108 |
+
Dizer "Instalando o Ollama (1 a 3 minutos; não precisa clicar em nada)..." "Installing Ollama (1 to 3 minutes; you don't need to click anything)..."
|
| 109 |
+
# sem -Wait: o instalador abre o Ollama na bandeja no fim, e o -Wait espera esse processo também (ficava parado para sempre)
|
| 110 |
+
$proc = Start-Process -FilePath $setup -ArgumentList "/VERYSILENT", "/NORESTART", "/SUPPRESSMSGBOXES" -PassThru
|
| 111 |
+
$inicio = Get-Date
|
| 112 |
+
while (-not $proc.WaitForExit(5000)) {
|
| 113 |
+
$seg = [int]((Get-Date) - $inicio).TotalSeconds
|
| 114 |
+
if ($seg -gt 600) { break }
|
| 115 |
+
Dizer " ... instalando o Ollama ($seg s)" " ... installing Ollama ($seg s)"
|
| 116 |
+
}
|
| 117 |
+
Remove-Item -Force $setup -ErrorAction SilentlyContinue
|
| 118 |
+
$bandeja = Join-Path $env:LOCALAPPDATA "Programs\Ollama\ollama app.exe"
|
| 119 |
+
if (Test-Path $ollamaExe) {
|
| 120 |
+
Dizer "Ollama instalado." "Ollama installed."
|
| 121 |
+
if (-not (Get-Process "ollama app" -ErrorAction SilentlyContinue) -and (Test-Path $bandeja)) { Start-Process -FilePath $bandeja }
|
| 122 |
+
} else {
|
| 123 |
+
Dizer "Não consegui instalar o Ollama. Instale por https://ollama.com/download e abra o openTARS de novo." "Could not install Ollama. Install it from https://ollama.com/download and open openTARS again."
|
| 124 |
+
}
|
| 125 |
+
} else {
|
| 126 |
+
Dizer "Ollama já instalado." "Ollama already installed."
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
# 4. Comandos (opentars, opentars-gui) e o atalho no Menu Iniciar
|
| 131 |
+
$python = Join-Path $Venv "Scripts\python.exe"
|
| 132 |
+
$pythonw = Join-Path $Venv "Scripts\pythonw.exe"
|
| 133 |
+
# PYTHONUTF8: acentos certos quando a saída vai para um arquivo ou outro programa
|
| 134 |
+
Set-Content -Encoding ASCII -Path (Join-Path $Bin "opentars.cmd") -Value "@echo off`r`nset PYTHONUTF8=1`r`n`"$python`" `"$App\tars.py`" %*"
|
| 135 |
+
Set-Content -Encoding ASCII -Path (Join-Path $Bin "opentars-gui.cmd") -Value "@echo off`r`nset PYTHONUTF8=1`r`ncd /d `"$App`"`r`nstart `"`" `"$pythonw`" -m tars_qt %*"
|
| 136 |
+
$caminho = [Environment]::GetEnvironmentVariable("Path", "User")
|
| 137 |
+
if (-not $caminho) { $caminho = "" }
|
| 138 |
+
if (($caminho -split ";") -notcontains $Bin) {
|
| 139 |
+
[Environment]::SetEnvironmentVariable("Path", ($caminho.TrimEnd(";") + ";" + $Bin).TrimStart(";"), "User")
|
| 140 |
+
}
|
| 141 |
+
$atalho = (New-Object -ComObject WScript.Shell).CreateShortcut($MenuIniciar)
|
| 142 |
+
$atalho.TargetPath = $pythonw
|
| 143 |
+
$atalho.Arguments = "-m tars_qt"
|
| 144 |
+
$atalho.WorkingDirectory = $App
|
| 145 |
+
$atalho.Description = "openTARS"
|
| 146 |
+
$atalho.IconLocation = (Join-Path $App "empacotamento\windows\opentars.ico") + ",0" # sem isto o atalho mostra o ícone do pythonw
|
| 147 |
+
$atalho.Save()
|
| 148 |
+
|
| 149 |
+
Dizer "Pronto. Abra o openTARS pelo Menu Iniciar (na primeira vez ele baixa o Gargantua 2, com barra)." `
|
| 150 |
+
"Done. Open openTARS from the Start menu (the first time it downloads Gargantua 2, with a progress bar)."
|
| 151 |
+
Dizer "Num terminal NOVO: 'opentars --diagnostico' confere tudo e 'opentars --prova' mede a IA; mande os relatórios que eles salvam." `
|
| 152 |
+
"In a NEW terminal: 'opentars --diagnostico' checks everything and 'opentars --prova' measures the AI; send the reports they save."
|
app/empacotamento/windows/opentars.ico
ADDED
|
|
app/idiomas/en.json
ADDED
|
@@ -0,0 +1,1699 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_nome": "English",
|
| 3 |
+
"_rotulo": "EN",
|
| 4 |
+
"_locale": [
|
| 5 |
+
"en",
|
| 6 |
+
"en_US",
|
| 7 |
+
"en_GB"
|
| 8 |
+
],
|
| 9 |
+
"_ia": "LANGUAGE: always reply in English, naturally and briefly. If the user writes in another language, reply in that language.",
|
| 10 |
+
"cmd.sair_principal": "exit",
|
| 11 |
+
"cmd.sair": [
|
| 12 |
+
"exit",
|
| 13 |
+
"quit",
|
| 14 |
+
"/exit",
|
| 15 |
+
"/quit"
|
| 16 |
+
],
|
| 17 |
+
"cmd.sim": [
|
| 18 |
+
"y",
|
| 19 |
+
"yes"
|
| 20 |
+
],
|
| 21 |
+
"cmd.modelos": [
|
| 22 |
+
"/model",
|
| 23 |
+
"/models",
|
| 24 |
+
"models",
|
| 25 |
+
"show models",
|
| 26 |
+
"list models"
|
| 27 |
+
],
|
| 28 |
+
"cmd.modelo": [
|
| 29 |
+
"/model"
|
| 30 |
+
],
|
| 31 |
+
"cmd.encerrar": [
|
| 32 |
+
"/unload",
|
| 33 |
+
"/unload all",
|
| 34 |
+
"unload all models",
|
| 35 |
+
"unload all ais",
|
| 36 |
+
"unload all llms",
|
| 37 |
+
"stop all models",
|
| 38 |
+
"stop all ais",
|
| 39 |
+
"stop all llms"
|
| 40 |
+
],
|
| 41 |
+
"cmd.limpar": [
|
| 42 |
+
"/clear",
|
| 43 |
+
"clear chat",
|
| 44 |
+
"clear conversation",
|
| 45 |
+
"forget the conversation"
|
| 46 |
+
],
|
| 47 |
+
"cmd.idioma": [
|
| 48 |
+
"/language",
|
| 49 |
+
"/lang"
|
| 50 |
+
],
|
| 51 |
+
"cmd.auto": [
|
| 52 |
+
"/model auto",
|
| 53 |
+
"automatic mode",
|
| 54 |
+
"auto mode",
|
| 55 |
+
"back to automatic"
|
| 56 |
+
],
|
| 57 |
+
"cmd.auto_argumento": [
|
| 58 |
+
"auto",
|
| 59 |
+
"automatic"
|
| 60 |
+
],
|
| 61 |
+
"detectar.visao": [
|
| 62 |
+
"my screen",
|
| 63 |
+
"the screen",
|
| 64 |
+
"on screen",
|
| 65 |
+
"click",
|
| 66 |
+
"click on",
|
| 67 |
+
"press the button",
|
| 68 |
+
"type on the screen",
|
| 69 |
+
"interface",
|
| 70 |
+
"window",
|
| 71 |
+
"button",
|
| 72 |
+
"keyboard",
|
| 73 |
+
"screenshot",
|
| 74 |
+
"icon",
|
| 75 |
+
"cursor",
|
| 76 |
+
"drag",
|
| 77 |
+
"on the screen",
|
| 78 |
+
"on my monitor"
|
| 79 |
+
],
|
| 80 |
+
"detectar.tecnico": [
|
| 81 |
+
"error",
|
| 82 |
+
"command line",
|
| 83 |
+
"install",
|
| 84 |
+
"graphics driver",
|
| 85 |
+
"installs"
|
| 86 |
+
],
|
| 87 |
+
"detectar.fechar": [
|
| 88 |
+
"close",
|
| 89 |
+
"quit",
|
| 90 |
+
"kill",
|
| 91 |
+
"tabs"
|
| 92 |
+
],
|
| 93 |
+
"detectar.sites": [
|
| 94 |
+
"website",
|
| 95 |
+
"site",
|
| 96 |
+
"web page",
|
| 97 |
+
"webpage"
|
| 98 |
+
],
|
| 99 |
+
"detectar.busca": [
|
| 100 |
+
"search",
|
| 101 |
+
"search for",
|
| 102 |
+
"look up",
|
| 103 |
+
"lookup",
|
| 104 |
+
"find me",
|
| 105 |
+
"look for",
|
| 106 |
+
"news",
|
| 107 |
+
"price of",
|
| 108 |
+
"how much does",
|
| 109 |
+
"how much is",
|
| 110 |
+
"tutorial",
|
| 111 |
+
"videos of",
|
| 112 |
+
"videos about",
|
| 113 |
+
"weather in",
|
| 114 |
+
"comes out",
|
| 115 |
+
"release date"
|
| 116 |
+
],
|
| 117 |
+
"detectar.acao": [
|
| 118 |
+
"command",
|
| 119 |
+
"file",
|
| 120 |
+
"files",
|
| 121 |
+
"folder",
|
| 122 |
+
"folders"
|
| 123 |
+
],
|
| 124 |
+
"busca.verbos": [
|
| 125 |
+
"search",
|
| 126 |
+
"look up",
|
| 127 |
+
"lookup"
|
| 128 |
+
],
|
| 129 |
+
"busca.conectores": [
|
| 130 |
+
"for",
|
| 131 |
+
"about",
|
| 132 |
+
"on"
|
| 133 |
+
],
|
| 134 |
+
"busca.preposicoes": [
|
| 135 |
+
"on",
|
| 136 |
+
"in",
|
| 137 |
+
"at"
|
| 138 |
+
],
|
| 139 |
+
"palavras.navegador": [
|
| 140 |
+
"browser",
|
| 141 |
+
"web browser",
|
| 142 |
+
"internet browser"
|
| 143 |
+
],
|
| 144 |
+
"modelo.ignorar": [
|
| 145 |
+
"the",
|
| 146 |
+
"a",
|
| 147 |
+
"an",
|
| 148 |
+
"of",
|
| 149 |
+
"to",
|
| 150 |
+
"for",
|
| 151 |
+
"please",
|
| 152 |
+
"model",
|
| 153 |
+
"ai",
|
| 154 |
+
"llm",
|
| 155 |
+
"on",
|
| 156 |
+
"use",
|
| 157 |
+
"using",
|
| 158 |
+
"want",
|
| 159 |
+
"switch",
|
| 160 |
+
"change",
|
| 161 |
+
"load",
|
| 162 |
+
"select",
|
| 163 |
+
"pick"
|
| 164 |
+
],
|
| 165 |
+
"modelo.menor": [
|
| 166 |
+
"the smallest",
|
| 167 |
+
"smallest",
|
| 168 |
+
"the lightest",
|
| 169 |
+
"lightest",
|
| 170 |
+
"the fastest",
|
| 171 |
+
"fastest",
|
| 172 |
+
"the default"
|
| 173 |
+
],
|
| 174 |
+
"modelo.maior": [
|
| 175 |
+
"the biggest",
|
| 176 |
+
"biggest",
|
| 177 |
+
"the largest",
|
| 178 |
+
"largest",
|
| 179 |
+
"the strongest",
|
| 180 |
+
"strongest",
|
| 181 |
+
"the most powerful",
|
| 182 |
+
"the smartest",
|
| 183 |
+
"smartest"
|
| 184 |
+
],
|
| 185 |
+
"modelo.visao": [
|
| 186 |
+
"the vision one",
|
| 187 |
+
"vision model",
|
| 188 |
+
"the one that sees"
|
| 189 |
+
],
|
| 190 |
+
"modelo.tecnico": [
|
| 191 |
+
"the technical one",
|
| 192 |
+
"the coding one",
|
| 193 |
+
"coding model",
|
| 194 |
+
"the code one"
|
| 195 |
+
],
|
| 196 |
+
"avaliacao": [
|
| 197 |
+
[
|
| 198 |
+
"describe what is on my monitor right now",
|
| 199 |
+
"visao"
|
| 200 |
+
],
|
| 201 |
+
[
|
| 202 |
+
"press that red icon in the top corner",
|
| 203 |
+
"visao"
|
| 204 |
+
],
|
| 205 |
+
[
|
| 206 |
+
"read me what that warning box says",
|
| 207 |
+
"visao"
|
| 208 |
+
],
|
| 209 |
+
[
|
| 210 |
+
"which browser tab is open right now",
|
| 211 |
+
"visao"
|
| 212 |
+
],
|
| 213 |
+
[
|
| 214 |
+
"drag this file to the trash with the cursor",
|
| 215 |
+
"visao"
|
| 216 |
+
],
|
| 217 |
+
[
|
| 218 |
+
"why does my c program give a segmentation fault",
|
| 219 |
+
"codigo"
|
| 220 |
+
],
|
| 221 |
+
[
|
| 222 |
+
"how do I write a loop over a list in java",
|
| 223 |
+
"codigo"
|
| 224 |
+
],
|
| 225 |
+
[
|
| 226 |
+
"write a script that renames photos by date",
|
| 227 |
+
"codigo"
|
| 228 |
+
],
|
| 229 |
+
[
|
| 230 |
+
"apt is stuck saying another process holds the lock",
|
| 231 |
+
"tecnico"
|
| 232 |
+
],
|
| 233 |
+
[
|
| 234 |
+
"what is the difference between ext4 and btrfs",
|
| 235 |
+
"tecnico"
|
| 236 |
+
],
|
| 237 |
+
[
|
| 238 |
+
"how do I compress a folder to tar.gz from the command line",
|
| 239 |
+
"tecnico"
|
| 240 |
+
],
|
| 241 |
+
[
|
| 242 |
+
"my graphics card doesn't show up in nvidia-smi",
|
| 243 |
+
"tecnico"
|
| 244 |
+
],
|
| 245 |
+
[
|
| 246 |
+
"turn off bluetooth for me",
|
| 247 |
+
"acao"
|
| 248 |
+
],
|
| 249 |
+
[
|
| 250 |
+
"turn the sound volume up a little",
|
| 251 |
+
"acao"
|
| 252 |
+
],
|
| 253 |
+
[
|
| 254 |
+
"move the screenshots from the desktop to the pictures folder",
|
| 255 |
+
"acao"
|
| 256 |
+
],
|
| 257 |
+
[
|
| 258 |
+
"close spotify and then open discord",
|
| 259 |
+
"acao"
|
| 260 |
+
],
|
| 261 |
+
[
|
| 262 |
+
"rename the file report.txt to final.txt",
|
| 263 |
+
"acao"
|
| 264 |
+
],
|
| 265 |
+
[
|
| 266 |
+
"turn on the system dark mode",
|
| 267 |
+
"acao"
|
| 268 |
+
],
|
| 269 |
+
[
|
| 270 |
+
"how much does an rtx 5060 cost in stores today",
|
| 271 |
+
"busca"
|
| 272 |
+
],
|
| 273 |
+
[
|
| 274 |
+
"find a tutorial on replacing thermal paste",
|
| 275 |
+
"busca"
|
| 276 |
+
],
|
| 277 |
+
[
|
| 278 |
+
"i want to watch lasagna recipe videos",
|
| 279 |
+
"busca"
|
| 280 |
+
],
|
| 281 |
+
[
|
| 282 |
+
"find out when the next marvel movie comes out",
|
| 283 |
+
"busca"
|
| 284 |
+
],
|
| 285 |
+
[
|
| 286 |
+
"show me today's news about artificial intelligence",
|
| 287 |
+
"busca"
|
| 288 |
+
],
|
| 289 |
+
[
|
| 290 |
+
"thanks a lot, really",
|
| 291 |
+
"simples"
|
| 292 |
+
],
|
| 293 |
+
[
|
| 294 |
+
"good evening, all good?",
|
| 295 |
+
"simples"
|
| 296 |
+
],
|
| 297 |
+
[
|
| 298 |
+
"go to gmail for me",
|
| 299 |
+
"simples"
|
| 300 |
+
],
|
| 301 |
+
[
|
| 302 |
+
"good morning, openTARS",
|
| 303 |
+
"simples"
|
| 304 |
+
],
|
| 305 |
+
[
|
| 306 |
+
"hey, how are you today?",
|
| 307 |
+
"simples"
|
| 308 |
+
],
|
| 309 |
+
[
|
| 310 |
+
"explain to me how a black hole works",
|
| 311 |
+
"geral"
|
| 312 |
+
],
|
| 313 |
+
[
|
| 314 |
+
"write a short poem about the sea",
|
| 315 |
+
"geral"
|
| 316 |
+
],
|
| 317 |
+
[
|
| 318 |
+
"give me name ideas for a dog",
|
| 319 |
+
"geral"
|
| 320 |
+
],
|
| 321 |
+
[
|
| 322 |
+
"summarize world war two in a few lines",
|
| 323 |
+
"geral"
|
| 324 |
+
],
|
| 325 |
+
[
|
| 326 |
+
"what is the difference between a virus and a bacterium",
|
| 327 |
+
"geral"
|
| 328 |
+
],
|
| 329 |
+
[
|
| 330 |
+
"help me plan a three day trip to lisbon",
|
| 331 |
+
"geral"
|
| 332 |
+
],
|
| 333 |
+
[
|
| 334 |
+
"translate to spanish: i like coffee",
|
| 335 |
+
"geral"
|
| 336 |
+
]
|
| 337 |
+
],
|
| 338 |
+
"gui.automatico": "Automatic",
|
| 339 |
+
"gui.ia": "AI",
|
| 340 |
+
"gui.nova_conversa": "New chat",
|
| 341 |
+
"gui.conectando": "connecting",
|
| 342 |
+
"gui.ollama_ok": "Ollama connected",
|
| 343 |
+
"gui.ollama_offline": "Ollama offline",
|
| 344 |
+
"gui.teclas": "Enter sends · ↑ repeats · Esc stops",
|
| 345 |
+
"gui.dica_entrada": "Ask openTARS for something…",
|
| 346 |
+
"gui.enviar": "Send",
|
| 347 |
+
"gui.parar": "Stop",
|
| 348 |
+
"gui.parando": "Stopping…",
|
| 349 |
+
"gui.voce": "You",
|
| 350 |
+
"gui.pensando": "thinking",
|
| 351 |
+
"gui.boas_vindas": "What can I do for you?",
|
| 352 |
+
"gui.boas_vindas_sub": "Ask your way. I open programs, click, search and look at the screen — all right here on your PC.",
|
| 353 |
+
"gui.exemplos": [
|
| 354 |
+
"Open the calculator and do 12 × 8 with its buttons",
|
| 355 |
+
"Which windows are open right now?",
|
| 356 |
+
"Find lasagna recipe videos on YouTube",
|
| 357 |
+
"How much memory and disk am I using?"
|
| 358 |
+
],
|
| 359 |
+
"gui.conversa_carregada": "Previous conversation loaded ({n} request(s)). “New chat” starts from scratch.",
|
| 360 |
+
"gui.atalho_dica": "Tip: {atalho} opens the quick bar from anywhere.",
|
| 361 |
+
"gui.n_modelos": "{n} chat model(s)",
|
| 362 |
+
"gui.sem_gpu": "no GPU",
|
| 363 |
+
"gui.trabalhando": "working",
|
| 364 |
+
"gui.modo_auto": "Automatic mode: openTARS picks the AI for each request.",
|
| 365 |
+
"gui.modelo_fixado": "{modelo} pinned for every request.",
|
| 366 |
+
"gui.tarefa": "{tarefa} task",
|
| 367 |
+
"gui.escolhido_por_voce": "chosen by you",
|
| 368 |
+
"gui.carregando": "loading {modelo}…",
|
| 369 |
+
"gui.pronto_em": "{modelo} ready ({segundos}s)",
|
| 370 |
+
"gui.respondeu_em": "answered in {segundos}s",
|
| 371 |
+
"gui.erro_modelos": "Couldn't read the models: {erro}",
|
| 372 |
+
"rapido.dica": "Ask or request something…",
|
| 373 |
+
"rapido.ajuda": "Enter sends · Esc closes · Ctrl+Enter opens the window",
|
| 374 |
+
"rapido.ocupado": "openTARS is busy with another request. Try again in a moment.",
|
| 375 |
+
"rapido.abrir_janela": "open window",
|
| 376 |
+
"perigo.titulo": "POTENTIALLY DANGEROUS COMMAND",
|
| 377 |
+
"perigo.explicacao": "It may delete data or change the system in a way that can't be undone.",
|
| 378 |
+
"perigo.pergunta": "Run it anyway? (y/N)",
|
| 379 |
+
"perigo.titulo_janela": "openTARS — dangerous command",
|
| 380 |
+
"perigo.dialogo": "The AI wants to run a command that may delete data or change the system in a way that can't be undone:\n\n{comando}\n\nRun it anyway?",
|
| 381 |
+
"ferramenta.open_application": "opening app",
|
| 382 |
+
"ferramenta.close_application": "closing app",
|
| 383 |
+
"ferramenta.open_website": "opening website",
|
| 384 |
+
"ferramenta.search_web": "searching",
|
| 385 |
+
"ferramenta.click_element": "clicking",
|
| 386 |
+
"ferramenta.list_elements": "reading the window",
|
| 387 |
+
"ferramenta.type_in_element": "filling in a field",
|
| 388 |
+
"ferramenta.execute_terminal": "running command",
|
| 389 |
+
"ferramenta.click_mouse": "clicking",
|
| 390 |
+
"ferramenta.drag_mouse": "dragging",
|
| 391 |
+
"ferramenta.scroll_mouse": "scrolling",
|
| 392 |
+
"ferramenta.type_text": "typing",
|
| 393 |
+
"ferramenta.press_key": "pressing a key",
|
| 394 |
+
"ferramenta.take_screenshot": "looking at the screen",
|
| 395 |
+
"ferramenta.list_windows": "checking open windows",
|
| 396 |
+
"ferramenta.focus_window": "bringing a window to the front",
|
| 397 |
+
"tarefa.visao": "vision",
|
| 398 |
+
"tarefa.tecnico": "technical",
|
| 399 |
+
"tarefa.acao": "action",
|
| 400 |
+
"tarefa.busca": "search",
|
| 401 |
+
"tarefa.simples": "simple",
|
| 402 |
+
"tarefa.geral": "general",
|
| 403 |
+
"categoria.visao": "vision, screen and graphical interfaces",
|
| 404 |
+
"categoria.simples": "simple tasks and quick answers",
|
| 405 |
+
"categoria.geral": "general conversation and reasoning",
|
| 406 |
+
"encaixe.gpu": "fits in the GPU",
|
| 407 |
+
"encaixe.misto": "GPU + CPU",
|
| 408 |
+
"encaixe.cpu": "mostly CPU, much slower",
|
| 409 |
+
"lista.gpu": "{fabricante} GPU detected: {total}GB of VRAM ({livre}GB free now)",
|
| 410 |
+
"lista.sem_gpu": "No dedicated GPU detected — models will run on the CPU.",
|
| 411 |
+
"lista.nenhum_modelo": "No models found in Ollama (it may be offline, or no model was downloaded yet — use 'ollama pull <model>').",
|
| 412 |
+
"lista.capacidades": "capabilities",
|
| 413 |
+
"lista.embeddings": "{n} installed embedding model(s) are not shown — they only generate vectors, not conversation, so they are not picked as a chat AI.",
|
| 414 |
+
"aviso.ollama_offline": "Ollama is not responding at {host}. Start Ollama (on Linux: sudo systemctl start ollama; on Windows and macOS: the Ollama app) or check the OLLAMA_HOST variable. Without it, openTARS has no AI to answer.",
|
| 415 |
+
"aviso.sem_display": "no graphical session found (DISPLAY is empty)",
|
| 416 |
+
"aviso.sem_mouse": "Mouse/keyboard control is off: {motivo}. Chat, opening apps/websites and terminal commands still work.",
|
| 417 |
+
"aviso.wayland": "Wayland session: opening apps/websites, commands, screenshots and clicking buttons by name work, but clicks and typing by coordinates only reach some apps. For full control, pick the \"Xorg\" session on the login screen (gear icon).",
|
| 418 |
+
"aviso.sem_modelo_conversa": "No chat model yet. Download one, for example: ollama pull qwen3:8b",
|
| 419 |
+
"msg.log_desativado": "warning: audit log disabled ({erro}).",
|
| 420 |
+
"msg.falhou": "failed",
|
| 421 |
+
"msg.tarefa_auto": "task detected: {tarefa} → model: {modelo}",
|
| 422 |
+
"msg.tarefa_manual": "pinned model: {modelo}",
|
| 423 |
+
"msg.carregando_fundo": "loading {modelo} in the background...",
|
| 424 |
+
"msg.carregando_titulo": "Loading AI: {modelo}",
|
| 425 |
+
"msg.carregando_demora": "This may take a while the first time.",
|
| 426 |
+
"msg.carregado": "{modelo} loaded in {segundos}s",
|
| 427 |
+
"msg.descarregando": "unloading {modelo}...",
|
| 428 |
+
"msg.pensando": "thinking",
|
| 429 |
+
"msg.tempo_total": "{modelo} — total time: {segundos}s",
|
| 430 |
+
"msg.analisando": "{modelo} is reading the tool result...",
|
| 431 |
+
"msg.ollama_sem_contato": "couldn't reach Ollama to check the running models (it may be offline).",
|
| 432 |
+
"msg.nenhuma_ia_carregada": "no AI loaded right now.",
|
| 433 |
+
"msg.encerrando_modelos": "unloading {n} model(s): {modelos}...",
|
| 434 |
+
"msg.ollama_perdido": "lost contact with Ollama while confirming.",
|
| 435 |
+
"msg.ainda_ativo": "still active: {modelos} — trying again ({tentativa}/{total})...",
|
| 436 |
+
"msg.encerramento_nao_confirmado": "WARNING: couldn't confirm that these were unloaded: {modelos}.",
|
| 437 |
+
"msg.ias_descarregadas": "all AIs were unloaded from memory (confirmed).",
|
| 438 |
+
"msg.erro_carregar_http": "Ollama ERROR ({codigo}) loading {modelo}: {detalhe}",
|
| 439 |
+
"msg.erro_carregar": "Couldn't load {modelo}: {erro}",
|
| 440 |
+
"msg.historico_apagado": "Conversation history cleared.",
|
| 441 |
+
"msg.modo_auto_ativado": "AUTO mode on.",
|
| 442 |
+
"msg.modelo_manual": "Manual model selected: {modelo}",
|
| 443 |
+
"msg.modelo_sem_ferramentas": "{modelo} doesn't support tools — it will only answer in text, without opening apps, websites, running commands etc.",
|
| 444 |
+
"msg.modelo_nao_encontrado": "No installed model looks like \"{pedido}\". Installed: {instalados}",
|
| 445 |
+
"msg.modelo_nao_instalado": "(it doesn't seem to be installed in Ollama yet — loading may fail; run 'ollama pull {modelo}')",
|
| 446 |
+
"msg.historico_ilegivel": "couldn't read the history in {arquivo} ({erro}) — starting from scratch.",
|
| 447 |
+
"msg.historico_nao_salvo": "couldn't save the conversation history: {erro}",
|
| 448 |
+
"msg.erro_ollama": "Ollama error: {detalhe}",
|
| 449 |
+
"msg.erro_ollama_http": "Ollama error ({codigo}): {detalhe}",
|
| 450 |
+
"msg.erro_comunicar_ollama": "Error talking to Ollama: {erro}",
|
| 451 |
+
"msg.ollama_recusou": "Ollama refused the conversation even without 'think'/'tools'.",
|
| 452 |
+
"msg.erro_streaming": "Error while streaming: {erro}",
|
| 453 |
+
"msg.limite_contexto": "the AI hit the context limit ({tokens} tokens) and was cut off. If it keeps happening, raise it with the TARS_CONTEXTO variable.",
|
| 454 |
+
"msg.falha_carregar_alternativa": "couldn't load {modelo}, trying an alternative...",
|
| 455 |
+
"msg.nenhum_modelo_carregou": "Couldn't load any available model for this task (tried: {tentados}).",
|
| 456 |
+
"msg.imagem_sem_ferramentas": "reading the image with tools failed ({erro}); trying with text only...",
|
| 457 |
+
"msg.ia_parou": "the AI stopped without answering; asking it to continue the task...",
|
| 458 |
+
"msg.ia_recusou": "the AI said it can't; reminding it that it has tools for this...",
|
| 459 |
+
"msg.sem_texto": "{modelo} returned no text in this reply.",
|
| 460 |
+
"msg.limite_etapas": "The AI used {n} steps without finishing (it stopped making progress or hit the ceiling). Ask it to continue, or split the task into smaller parts.",
|
| 461 |
+
"msg.interrompido": "interrupted.",
|
| 462 |
+
"msg.erro_inesperado": "unexpected error: {erro}",
|
| 463 |
+
"term.ias_disponiveis": "Available AIs:",
|
| 464 |
+
"term.modo_atual": "Current mode: {modo}",
|
| 465 |
+
"term.modelo_fixado": "Pinned model: {modelo}",
|
| 466 |
+
"term.modo_auto_explica": "openTARS picks the best AI for each task by itself.",
|
| 467 |
+
"term.voce": "You",
|
| 468 |
+
"term.conversa_carregada": "previous conversation: {n} request(s) · /clear starts over",
|
| 469 |
+
"term.ajuda": "openTARS {versao} · local AI assistant for Linux\n\nChat\n opentars open the chat in the terminal (continues the last one)\n opentars --new start a new conversation\n opentars --resume pick a saved conversation to continue\n opentars --plan plan mode: the AI only describes what it would do\n opentars --auto edits in this folder without asking (delete, send and install still ask)\n opentars --chat \"request\" answer one request and exit\n opentars -p \"request\" for scripts: only the answer (or --output-format json); reads stdin\n opentars-gui open the window\n opentars-gui --rapido open the quick bar (ctrl+alt+space)\n\nModels\n opentars --model <name> use this model with -p\n opentars --explicar \"request\" show how the task and the model are chosen\n opentars --avaliar-classificador measure how often Murph and automatic mode are right\n\nEnvironment\n opentars --diagnostico check Ollama, screen and accessibility (changes nothing)\n opentars --autoteste diagnosis + a real test with the calculator\n opentars --setup install whatever is missing (Ollama, models...)\n\nPreferences\n opentars --idioma <code> change the language (pt_BR or en)\n opentars --atalho [keys|off] show, change or remove the global shortcut\n opentars --version show the version\n\nInside the chat, /help lists the commands. An AGENTS.md in the folder goes into every conversation.",
|
| 470 |
+
"idioma.lista_titulo": "Available languages:",
|
| 471 |
+
"idioma.como_trocar": "Change it with: /language <code> (e.g. /language pt_BR)",
|
| 472 |
+
"idioma.trocado": "Language: {nome}",
|
| 473 |
+
"idioma.nao_encontrado": "Language \"{pedido}\" not found. Available: {lista}",
|
| 474 |
+
"avaliacao.titulo": "Evaluating request classification with {n} sentences...",
|
| 475 |
+
"avaliacao.com_palavras": "All layers (AUTO mode): {acertos}/{n} ({pct}%) <- what openTARS uses",
|
| 476 |
+
"avaliacao.erros_local": "Local classifier mistakes on its own (sentence | expected | answered):",
|
| 477 |
+
"avaliacao.erros_total": "AUTO mode mistakes (sentence | expected | chose (layers)):",
|
| 478 |
+
"diag.titulo": "diagnostics",
|
| 479 |
+
"diag.titulo_sistema": "System",
|
| 480 |
+
"diag.titulo_ia": "AI",
|
| 481 |
+
"diag.titulo_controle": "Computer control",
|
| 482 |
+
"diag.idioma": "Language",
|
| 483 |
+
"diag.sistema": "System",
|
| 484 |
+
"diag.sessao": "Session",
|
| 485 |
+
"diag.ollama_ok": "version {versao} at {host}",
|
| 486 |
+
"diag.modelos": "Chat models",
|
| 487 |
+
"diag.ajudante": "Helper",
|
| 488 |
+
"diag.livres": "free",
|
| 489 |
+
"diag.escolha_auto": "Automatic choice ({tarefa} task)",
|
| 490 |
+
"diag.mouse": "Mouse and keyboard",
|
| 491 |
+
"diag.janelas": "Window list",
|
| 492 |
+
"diag.janelas_sem_x": "no access (needs X11 or XWayland)",
|
| 493 |
+
"diag.janelas_ok": "{n} open window(s)",
|
| 494 |
+
"diag.print": "Screenshot",
|
| 495 |
+
"diag.print_preto": "the image came out all black (on Wayland, install a screenshot tool: sudo apt install gnome-screenshot)",
|
| 496 |
+
"diag.acessibilidade": "Click by name (accessibility)",
|
| 497 |
+
"diag.acessiveis": "{n} accessible window(s): {apps}",
|
| 498 |
+
"diag.nenhuma_acessivel": "no accessible window right now (open an app and run again; Qt/KDE apps show up once openTARS first uses accessibility)",
|
| 499 |
+
"diag.clipboard": "Clipboard (accented text)",
|
| 500 |
+
"diag.clipboard_falta": "no xclip/xsel/wl-copy: sudo apt install xclip",
|
| 501 |
+
"diag.interface": "Graphical interface",
|
| 502 |
+
"diag.atalho": "Global shortcut",
|
| 503 |
+
"diag.resumo": "{falhas} failure(s), {avisos} warning(s).",
|
| 504 |
+
"auto.titulo": "self-test",
|
| 505 |
+
"auto.titulo_classificador": "Automatic model choice",
|
| 506 |
+
"auto.classificador": "Classification accuracy",
|
| 507 |
+
"auto.classificando": "classifying {n} sentences...",
|
| 508 |
+
"auto.classificador_resultado": "{acertos}/{n} ({pct}%) in AUTO mode; Murph alone {murph}/{n}; {ms} ms per sentence",
|
| 509 |
+
"auto.titulo_calculadora": "Real test: calculator",
|
| 510 |
+
"auto.calculadora_teste": "Calculator 7 + 2",
|
| 511 |
+
"auto.calculadora": "calculator",
|
| 512 |
+
"auto.pedido_calculadora": "Open the calculator and do 7 + 2 by clicking its buttons. Then tell me the result.",
|
| 513 |
+
"auto.nao_mexa": "I'll open the calculator and click by myself. Don't touch the mouse or keyboard for a few seconds...",
|
| 514 |
+
"auto.sem_calculadora": "no calculator installed ({nome}); test skipped",
|
| 515 |
+
"auto.sem_ia": "no Ollama or no chat model: can't test",
|
| 516 |
+
"auto.passou": "passed (the display shows 9)",
|
| 517 |
+
"auto.visor_ok_resposta_nao": "the display shows 9, but the AI's answer didn't state the result",
|
| 518 |
+
"auto.sem_janela_acessivel": "the calculator doesn't expose its buttons through accessibility",
|
| 519 |
+
"auto.falhou": "didn't reach 9 (display: {visor})",
|
| 520 |
+
"auto.calculadora_detalhe": "{segundos} s · {ferramentas}",
|
| 521 |
+
"auto.resposta_ia": "AI answer",
|
| 522 |
+
"auto.relatorio_salvo": "Report saved to {arquivo} — send this file if you need help.",
|
| 523 |
+
"atalho.tecla_espaco": "Space",
|
| 524 |
+
"atalho.registrado": "Global shortcut: {atalho} opens the quick bar ({ambiente}).",
|
| 525 |
+
"atalho.nao_registrado": "The global shortcut isn't set up yet.",
|
| 526 |
+
"atalho.como_registrar": "Set it with: opentars --atalho ctrl+alt+space (or another combination). Remove it with: opentars --atalho off",
|
| 527 |
+
"atalho.conflito": "that combination is already used by: {acao}. Pick another one, e.g. opentars --atalho ctrl+alt+t",
|
| 528 |
+
"atalho.falhou": "couldn't save the shortcut in the system settings",
|
| 529 |
+
"atalho.invalido": "invalid combination. Examples: ctrl+alt+space, super+t",
|
| 530 |
+
"atalho.manual": "On {ambiente}, add the shortcut by hand (Settings > Keyboard > Shortcuts) with the command: {comando}",
|
| 531 |
+
"atalho.removido": "Global shortcut removed.",
|
| 532 |
+
"atalho.sem_espaco": "there is no free slot for custom shortcuts",
|
| 533 |
+
"atalho.sem_suporte": "this desktop doesn't allow adding the shortcut automatically",
|
| 534 |
+
"setup.titulo": "=== Setting up openTARS ===",
|
| 535 |
+
"setup.aviso": "WARNING",
|
| 536 |
+
"setup.ollama_ja": "Ollama is already installed — skipping.",
|
| 537 |
+
"setup.ollama_existente": "An Ollama is already answering at {url} (Docker/other installer) — using it.",
|
| 538 |
+
"setup.ollama_instalando": "Ollama not found. Installing (via ollama.com/install.sh)...",
|
| 539 |
+
"setup.ollama_ok": "Ollama installed.",
|
| 540 |
+
"setup.ollama_falhou": "couldn't install Ollama automatically (no internet?).",
|
| 541 |
+
"setup.ollama_manual": "Install it from https://ollama.com/download and then run: opentars --setup",
|
| 542 |
+
"setup.venv_sem_tk": "Python environment without tkinter, but '{python}' has it — recreating.",
|
| 543 |
+
"setup.venv_ja": "Python environment already exists — skipping.",
|
| 544 |
+
"setup.venv_quebrado": "Old Python environment is broken — recreating.",
|
| 545 |
+
"setup.venv_criando": "Creating an isolated Python environment ({versao})...",
|
| 546 |
+
"setup.pip_falhou": "couldn't update pip/setuptools (going on anyway).",
|
| 547 |
+
"setup.venv_ok": "Python environment created.",
|
| 548 |
+
"setup.venv_falhou": "couldn't create the Python environment. Check the 'python3-venv' package.",
|
| 549 |
+
"setup.deps_verificando": "Checking Python dependencies...",
|
| 550 |
+
"setup.deps_ok": "All Python dependencies are already installed — skipping.",
|
| 551 |
+
"setup.deps_instalando": "Installing Python dependencies: {pacotes}",
|
| 552 |
+
"setup.deps_falhou": "couldn't install everything now (no internet?). Run later: opentars --setup",
|
| 553 |
+
"setup.tk_ok": "Graphical interface available (tkinter OK).",
|
| 554 |
+
"setup.tk_falta": "tkinter not found — the graphical interface (opentars-gui) won't open.",
|
| 555 |
+
"setup.tk_instale": "Install it with: sudo apt install python3-tk",
|
| 556 |
+
"setup.tk_terminal": "Terminal mode (opentars) works normally.",
|
| 557 |
+
"setup.sem_venv": "no isolated Python environment, skipping Python dependencies.",
|
| 558 |
+
"setup.ollama_nao_respondeu": "Ollama did not answer at {url}.",
|
| 559 |
+
"setup.baixado": "'{modelo}' downloaded.",
|
| 560 |
+
"setup.nao_baixou": "couldn't download '{modelo}' now. Run later: ollama pull {modelo}",
|
| 561 |
+
"setup.ja_tem_modelos": "You already have {n} chat model(s) — skipping.",
|
| 562 |
+
"setup.sem_modelo_pedido": "no chat model (TARS_SEM_MODELO=1). Download one later: ollama pull qwen3:8b",
|
| 563 |
+
"setup.baixando_conversa": "Downloading the chat model '{modelo}' (picked for your hardware: {vram} GB of VRAM, {ram} GB of RAM).",
|
| 564 |
+
"setup.pode_demorar": "This may take a few minutes, depending on your internet...",
|
| 565 |
+
"setup.sem_ollama_modelo": "without Ollama, no chat model could be downloaded. After starting Ollama: opentars --setup",
|
| 566 |
+
"setup.pronto": "=== openTARS is ready! Open it from the applications menu or type 'opentars' in a terminal. ===",
|
| 567 |
+
"setup.dica_atalho": "Tip: after you open openTARS once, Ctrl+Alt+Space opens the quick bar from anywhere.",
|
| 568 |
+
"desktop.generico": "Local AI assistant",
|
| 569 |
+
"desktop.comentario": "100% local AI assistant that controls your desktop — runs on Ollama",
|
| 570 |
+
"desktop.barra_rapida": "Quick bar",
|
| 571 |
+
"desktop.palavras": "AI;assistant;ollama;tars;automation;",
|
| 572 |
+
"setup.acess_ok": "Clicking buttons by name is available (accessibility OK).",
|
| 573 |
+
"setup.acess_falta": "accessibility library not found — clicking by name is off (the AI uses screenshots + coordinates).",
|
| 574 |
+
"setup.acess_instale": "Install it with: sudo apt install python3-gi gir1.2-atspi-2.0 at-spi2-core",
|
| 575 |
+
"detectar.abrir": [
|
| 576 |
+
"open",
|
| 577 |
+
"launch",
|
| 578 |
+
"start",
|
| 579 |
+
"run",
|
| 580 |
+
"execute"
|
| 581 |
+
],
|
| 582 |
+
"detectar.codigo": [
|
| 583 |
+
"code",
|
| 584 |
+
"coding",
|
| 585 |
+
"programming",
|
| 586 |
+
"program in",
|
| 587 |
+
"source code",
|
| 588 |
+
"compile",
|
| 589 |
+
"compiler",
|
| 590 |
+
"function",
|
| 591 |
+
"variable",
|
| 592 |
+
"algorithm",
|
| 593 |
+
"loop",
|
| 594 |
+
"segfault",
|
| 595 |
+
"stack trace"
|
| 596 |
+
],
|
| 597 |
+
"tarefa.codigo": "code",
|
| 598 |
+
"categoria.codigo": "programming and code",
|
| 599 |
+
"msg.trocando_modelo": "{modelo} refused again; handing the request to {novo}...",
|
| 600 |
+
"msg.memoria_sozinho": "Asked to remember: saved \"{fato}\" myself.",
|
| 601 |
+
"gui.copiar": "Copy",
|
| 602 |
+
"gui.copiado": "Copied",
|
| 603 |
+
"gui.codigo": "code",
|
| 604 |
+
"msg.imagem_citada": "Image mentioned in the request: {nome} (attached automatically).",
|
| 605 |
+
"msg.descrevendo_tela": "Looking at the screen with {visao}...",
|
| 606 |
+
"msg.muitas_falhas": "{n} tool calls failed in a row: the AI will stop and explain what blocked it.",
|
| 607 |
+
"detectar.verbos": [
|
| 608 |
+
"make",
|
| 609 |
+
"type",
|
| 610 |
+
"write",
|
| 611 |
+
"send",
|
| 612 |
+
"click",
|
| 613 |
+
"create",
|
| 614 |
+
"delete",
|
| 615 |
+
"remove",
|
| 616 |
+
"move",
|
| 617 |
+
"copy",
|
| 618 |
+
"paste",
|
| 619 |
+
"save",
|
| 620 |
+
"play",
|
| 621 |
+
"pause",
|
| 622 |
+
"turn",
|
| 623 |
+
"set",
|
| 624 |
+
"increase",
|
| 625 |
+
"decrease",
|
| 626 |
+
"raise",
|
| 627 |
+
"lower",
|
| 628 |
+
"mute",
|
| 629 |
+
"unmute",
|
| 630 |
+
"install",
|
| 631 |
+
"rename",
|
| 632 |
+
"ask",
|
| 633 |
+
"answer",
|
| 634 |
+
"reply",
|
| 635 |
+
"calculate",
|
| 636 |
+
"add",
|
| 637 |
+
"multiply",
|
| 638 |
+
"look",
|
| 639 |
+
"read",
|
| 640 |
+
"show",
|
| 641 |
+
"take",
|
| 642 |
+
"press",
|
| 643 |
+
"select",
|
| 644 |
+
"minimize",
|
| 645 |
+
"maximize",
|
| 646 |
+
"close",
|
| 647 |
+
"open",
|
| 648 |
+
"search",
|
| 649 |
+
"find",
|
| 650 |
+
"launch",
|
| 651 |
+
"start",
|
| 652 |
+
"run",
|
| 653 |
+
"go",
|
| 654 |
+
"visit",
|
| 655 |
+
"stop"
|
| 656 |
+
],
|
| 657 |
+
"msg.tentando_outro_modelo": "{modelo} couldn't do it; trying {novo}, without repeating what already failed...",
|
| 658 |
+
"explicar.titulo": "How openTARS decides the request: \"{pedido}\"",
|
| 659 |
+
"explicar.camadas": "Layers (in the order they look at the request):",
|
| 660 |
+
"explicar.votos": "Votes added up: {votos}",
|
| 661 |
+
"explicar.resultado": "Task: {tarefa} (decided by: {via})",
|
| 662 |
+
"explicar.multi": "Several steps: {partes} -> the AI thinks first, gets a reminder and a bigger model",
|
| 663 |
+
"explicar.fila": "Model queue for this task (the first one that loads answers):",
|
| 664 |
+
"explicar.placar": "{acertos}/{total} worked the last times",
|
| 665 |
+
"explicar.placar_ruim": "{acertos}/{total} worked -> moved to the end of the queue",
|
| 666 |
+
"explicar.sem_placar": "no history yet",
|
| 667 |
+
"explicar.pensar": "Reasoning (think): {sim_nao} · tools offered: {n}",
|
| 668 |
+
"explicar.sim": "yes",
|
| 669 |
+
"explicar.nao": "no",
|
| 670 |
+
"explicar.uso": "Usage: opentars --explicar \"your request\"",
|
| 671 |
+
"msg.plano": "Plan:",
|
| 672 |
+
"msg.plano_incompleto": "The AI was about to stop with {feitas} of {total} steps done: telling it to finish the plan...",
|
| 673 |
+
"msg.conferindo_conclusao": "Checking that every part of the request was really done...",
|
| 674 |
+
"ferramenta.remember": "remembering",
|
| 675 |
+
"ferramenta.forget": "forgetting",
|
| 676 |
+
"aviso.wayland_ydotool": "(Or install ydotool 1.0+ and start the ydotoold service: then mouse and keyboard work in any window. Now: {motivo})",
|
| 677 |
+
"diag.wayland_ydotool": "Wayland with ydotool: mouse and keyboard in any window (experimental; turn mouse acceleration off for better precision)",
|
| 678 |
+
"perigo.sem_confirmacao_rotina": "A request running without a window asked for a dangerous command, but there is no one to confirm it in the terminal: I didn't run it.",
|
| 679 |
+
"ferramenta.move_window": "moving the window",
|
| 680 |
+
"term.onde_conversar": "Chatting happens in the window: opentars-gui (or the quick bar, Ctrl+Alt+Space).",
|
| 681 |
+
"avaliacao.so_murph": "Murph alone (local helper): {acertos}/{n} ({pct}%) · sure of {certos}/{n}, {pct_certos}% of those right",
|
| 682 |
+
"setup.helper_murph": "helper Murph {versao} ships with the package: it sorts every request without downloading any helper model.",
|
| 683 |
+
"diag.helper_murph": "Murph {versao}",
|
| 684 |
+
"diag.helper_sem_murph": "the Murph helper was not found (modelos/murph.json): reinstall openTARS",
|
| 685 |
+
"gui.helper_murph": "helper Murph {versao}",
|
| 686 |
+
"gargantua.ok": "Gargantua {versao}, the official openTARS AI ({modelo}): used first for actions and searches",
|
| 687 |
+
"gargantua.desligado": "{modelo} installed, but TARS_SEM_GARGANTUA=1: AUTO does not prefer it",
|
| 688 |
+
"gargantua.nao_instalado": "Gargantua is not installed. To get the official openTARS AI: ollama pull {modelo}",
|
| 689 |
+
"setup.gargantua_ja": "Gargantua, the official openTARS AI, is already installed ({modelo}).",
|
| 690 |
+
"setup.gargantua_baixando": "Downloading Gargantua, the official openTARS AI ({modelo}, ~1.6 GB)...",
|
| 691 |
+
"setup.gargantua_segundo_plano": "There is no terminal here to show progress (install from the app store or an automatic install): the Gargantua download (~1.6 GB) continues in the background. openTARS shows the progress when you open it.",
|
| 692 |
+
"setup.gargantua_pulado": "TARS_SEM_GARGANTUA=1: Gargantua was not downloaded.",
|
| 693 |
+
"msg.folego": "long task: {etapas} steps, {acoes} actions done; continuing",
|
| 694 |
+
"versao.nova": "openTARS {versao} is out! To update, run the install command again (it's in the GitHub README).",
|
| 695 |
+
"versao.em_dia": "up to date (checks GitHub once a day)",
|
| 696 |
+
"diag.versao": "New version",
|
| 697 |
+
"term.onde_conversar_sem_interface": "No graphical session here: chat in the terminal with opentars --chat.",
|
| 698 |
+
"chat.titulo": "chat in the terminal",
|
| 699 |
+
"chat.dica": "/help for commands · ctrl+c stops an answer · /exit leaves",
|
| 700 |
+
"chat.ctrl_c": "ctrl+c again (or /exit) to leave",
|
| 701 |
+
"chat.ajuda": "Commands\n /models lists the installed AIs\n /model <name> pins an AI (e.g. /model gargantua, /model the smallest)\n /model auto back to automatic choice\n /resume picks a saved conversation to continue\n /compact summarizes the start of the conversation (frees context)\n /context shows how much context is in use\n /mode <mode> ask, plan (only describes) or auto\n /undo reverts the file edits of the last request\n /init creates an AGENTS.md with the project instructions\n !<command> runs a shell command (its output goes to the next request)\n /clear starts a new conversation\n /language <code> changes the language (pt_BR or en)\n /unload unloads every AI from memory\n /help shows this list\n /exit quits\n\nShortcuts\n ctrl+c stops the answer (twice in a row: quits)\n ↑ ↓ previous requests\n ctrl+r searches previous requests",
|
| 702 |
+
"diag.ambiente": "environment",
|
| 703 |
+
"diag.modo_sem_interface": "no graphical session: terminal mode (opentars --chat). Mouse, keyboard, screen and windows are not used here.",
|
| 704 |
+
"diag.wsl_ollama_windows": "Ollama is running on Windows ({host})",
|
| 705 |
+
"diag.wsl_sem_ollama": "No Ollama reachable from WSL. Install it in WSL (curl -fsSL https://ollama.com/install.sh | sh) or, if it runs on Windows, set OLLAMA_HOST=0.0.0.0 there and restart it.",
|
| 706 |
+
"aviso.modo_sem_interface": "No graphical session: openTARS works as a terminal assistant (chat and commands).",
|
| 707 |
+
"setup.wsl_detectado": "WSL detected: openTARS works here in terminal mode (opentars --chat), or with windows through WSLg.",
|
| 708 |
+
"setup.ollama_windows": "Ollama is running on Windows, at {url} — using it. (On Windows, set OLLAMA_HOST=0.0.0.0 for it to be reachable from WSL.)",
|
| 709 |
+
"setup.ollama_serve_manual": "No systemd here: start Ollama in another terminal with 'ollama serve' and run 'opentars --setup' again.",
|
| 710 |
+
"diag.amb_desktop": "desktop",
|
| 711 |
+
"diag.amb_wslg": "WSL{wsl} with WSLg (Linux windows on Windows)",
|
| 712 |
+
"diag.amb_sem_tela": "no graphical session",
|
| 713 |
+
"diag.amb_wsl_sem_tela": "WSL{wsl}, no graphical session",
|
| 714 |
+
"diag.amb_ssh": "SSH, no graphical session",
|
| 715 |
+
"msg.cortando_raciocinio": "{modelo} is reasoning without being asked: redoing it without the reasoning (/no_think).",
|
| 716 |
+
"pu.janela": "openTARS: first steps",
|
| 717 |
+
"pu.slogan": "Your assistant that uses your computer, without leaving it.",
|
| 718 |
+
"pu.passo": "Step {n} of {total}",
|
| 719 |
+
"pu.passo.idioma": "Language",
|
| 720 |
+
"pu.passo.ollama": "Ollama",
|
| 721 |
+
"pu.passo.nuvem": "Cloud (optional)",
|
| 722 |
+
"pu.passo.gargantua": "Download the models",
|
| 723 |
+
"pu.passo.teste": "Quick test",
|
| 724 |
+
"pu.voltar": "Back",
|
| 725 |
+
"pu.continuar": "Continue",
|
| 726 |
+
"pu.pausar": "Pause",
|
| 727 |
+
"pu.retomar": "Resume",
|
| 728 |
+
"pu.tentar_de_novo": "Try again",
|
| 729 |
+
"pu.ollama.titulo": "Looking for Ollama",
|
| 730 |
+
"pu.ollama.texto": "Ollama is the program that runs the AI model on your computer. TARS needs it to work.",
|
| 731 |
+
"pu.ollama.procurando": "Looking for Ollama on this computer…",
|
| 732 |
+
"pu.ollama.ok": "Ollama found on this computer (version {versao})",
|
| 733 |
+
"pu.ollama.parado": "Ollama is installed, but not running.",
|
| 734 |
+
"pu.ollama.faltando": "Ollama is not installed yet.",
|
| 735 |
+
"pu.ollama.instalar": "Install Ollama",
|
| 736 |
+
"pu.ollama.iniciar": "Start Ollama",
|
| 737 |
+
"pu.ollama.procurar_de_novo": "Look again",
|
| 738 |
+
"pu.ollama.instalando": "Installing Ollama. A system window may ask for your password.",
|
| 739 |
+
"pu.ollama.iniciando": "Starting Ollama…",
|
| 740 |
+
"pu.ollama.erro_instalar": "I couldn't install it: {motivo}",
|
| 741 |
+
"pu.ollama.abri_download": "I opened the Ollama download page in your browser. Install it, open Ollama and click Look again.",
|
| 742 |
+
"pu.ollama.erro_iniciar": "I couldn't start it: {motivo}",
|
| 743 |
+
"pu.nuvem.titulo": "Do you want to use the cloud too?",
|
| 744 |
+
"pu.nuvem.texto": "TARS works 100% on your computer. The cloud is an extra, for requests that need a bigger model. You can change this later in Settings.",
|
| 745 |
+
"pu.nuvem.nao": "No, only on my computer",
|
| 746 |
+
"pu.nuvem.nao_desc": "Nothing leaves this computer. This is the default.",
|
| 747 |
+
"pu.nuvem.sim": "Yes, set up the cloud",
|
| 748 |
+
"pu.nuvem.sim_desc": "You use your own key from a provider, such as Ollama Cloud. What you type or say leaves the computer.",
|
| 749 |
+
"pu.nuvem.aviso_treino": "Free plans from some providers may use your content for training.",
|
| 750 |
+
"pu.chave.titulo": "Connect your provider",
|
| 751 |
+
"pu.chave.texto": "Pick the provider and paste your key. It stays only on this computer.",
|
| 752 |
+
"pu.chave.provedor": "Provider",
|
| 753 |
+
"pu.chave.endereco": "Address",
|
| 754 |
+
"pu.chave.chave": "Key",
|
| 755 |
+
"pu.chave.endereco_ph": "https://…",
|
| 756 |
+
"pu.chave.testar": "Test connection",
|
| 757 |
+
"pu.chave.testando": "Testing…",
|
| 758 |
+
"pu.chave.ok": "Connected.",
|
| 759 |
+
"pu.chave.erro_chave": "The provider rejected the key.",
|
| 760 |
+
"pu.chave.erro_endereco": "That address did not answer as expected.",
|
| 761 |
+
"pu.chave.erro_rede": "No connection to the provider.",
|
| 762 |
+
"pu.chave.erro_limite": "The free limit has run out for now.",
|
| 763 |
+
"pu.chave.erro_outro": "The provider answered with an error ({motivo}).",
|
| 764 |
+
"pu.chave.a_confirmar": "The Ollama Cloud address still needs confirming: edit it if it is different.",
|
| 765 |
+
"pu.chave.falta": "Fill in the address and the key to continue.",
|
| 766 |
+
"pu.garg.titulo": "Downloading TARS's brain",
|
| 767 |
+
"pu.garg.texto": "Gargantua is the model that understands your requests. It is downloaded once and stays on your computer. After that, TARS works without internet.",
|
| 768 |
+
"pu.garg.titulo_ja": "Gargantua is already installed",
|
| 769 |
+
"pu.garg.texto_ja": "It is already on this computer. No need to download it again.",
|
| 770 |
+
"pu.garg.nome": "Gargantua",
|
| 771 |
+
"pu.garg.feito": "{feito} of {total}",
|
| 772 |
+
"pu.garg.restante": "about {tempo} left",
|
| 773 |
+
"pu.garg.preparando": "Getting the download ready…",
|
| 774 |
+
"pu.calculando": "calculating…",
|
| 775 |
+
"pu.menos_de_um_minuto": "less than 1 minute",
|
| 776 |
+
"pu.um_minuto": "1 minute",
|
| 777 |
+
"pu.uns_minutos": "{n} minutes",
|
| 778 |
+
"pu.garg.ollama_ok": "Ollama found on this computer",
|
| 779 |
+
"pu.garg.espaco_ok": "Enough disk space",
|
| 780 |
+
"pu.garg.espaco_pouco": "Low disk space: {livre} GB left and Gargantua needs about {precisa} GB.",
|
| 781 |
+
"pu.garg.erro": "The download stopped: {motivo}",
|
| 782 |
+
"pu.garg.pausado": "Download paused.",
|
| 783 |
+
"pu.teste.titulo": "Quick test",
|
| 784 |
+
"pu.teste.texto": "I'll ask Gargantua a simple question to make sure everything works.",
|
| 785 |
+
"pu.teste.testando": "Asking Gargantua…",
|
| 786 |
+
"pu.teste.ok": "Gargantua answered in {seg} s",
|
| 787 |
+
"pu.teste.resposta": "Answer: {texto}",
|
| 788 |
+
"pu.teste.erro": "The test failed: {motivo}",
|
| 789 |
+
"pu.pronto.titulo": "All set",
|
| 790 |
+
"pu.pronto.texto": "TARS is installed and working on your computer.",
|
| 791 |
+
"pu.pronto.nuvem_sim": "Cloud on: {provedor}.",
|
| 792 |
+
"pu.pronto.nuvem_nao": "Cloud off: everything runs here.",
|
| 793 |
+
"pu.pronto.abrir": "Open openTARS",
|
| 794 |
+
"pu.idioma.titulo": "Which language do you want to use for TARS?",
|
| 795 |
+
"pu.idioma.texto": "You can change this later in Settings.",
|
| 796 |
+
"pu.teste.pular": "Skip the test",
|
| 797 |
+
"msg.erro_servidor_api": "The server answered with an error ({codigo}): {detalhe}",
|
| 798 |
+
"msg.servidor_api_offline": "The server {url} is not answering.",
|
| 799 |
+
"msg.nuvem_desligada": "The cloud is off. Turn it on in Settings > Cloud, or pick a model on your computer.",
|
| 800 |
+
"msg.nuvem_chave": "The cloud rejected the key. Check it in Settings > Cloud.",
|
| 801 |
+
"msg.nuvem_limite": "The cloud asked you to wait (plan usage limit). Try again in a few minutes or go back to the model on your computer.",
|
| 802 |
+
"gui.voz": "Voice",
|
| 803 |
+
"gui.voz_falar_agora": "Speak now",
|
| 804 |
+
"gui.voz_ativacao": "Always listen for \"TARS\"",
|
| 805 |
+
"gui.voz_responder": "Speak the answers",
|
| 806 |
+
"gui.voz_instalar": "Install voice (~700 MB, all local)",
|
| 807 |
+
"gui.voz_instalando": "Installing voice...",
|
| 808 |
+
"gui.voz_ouvindo": "Listening: say \"TARS\" and your request",
|
| 809 |
+
"gui.voz_fale": "Go ahead...",
|
| 810 |
+
"gui.voz_chamado": "Yes? Say your request...",
|
| 811 |
+
"gui.voz_entendendo": "Transcribing...",
|
| 812 |
+
"voz.por_voz": "voice",
|
| 813 |
+
"voz.ouvindo": "Listening to the microphone. Say \"TARS\" and your request (e.g. \"TARS, open Firefox\"). Ctrl+C quits.",
|
| 814 |
+
"voz.chamado": "Yes? Say your request...",
|
| 815 |
+
"voz.falta": "Voice is not ready yet. Missing: {itens}. Install with: opentars --install-voice (or the Voice button in the window)",
|
| 816 |
+
"voz.falta_faster_whisper": "speech recognition (faster-whisper)",
|
| 817 |
+
"voz.falta_piper_tts": "speech synthesis (piper-tts)",
|
| 818 |
+
"voz.falta_voz": "the voice for this language",
|
| 819 |
+
"voz.falta_gravador": "an audio recorder (sudo apt install alsa-utils)",
|
| 820 |
+
"voz.falta_tocador": "an audio player (sudo apt install alsa-utils)",
|
| 821 |
+
"voz.falta_sounddevice": "the microphone library (sounddevice; openTARS installs it when you turn the voice on)",
|
| 822 |
+
"voz.precisa_sistema": "First install on the system: {itens}",
|
| 823 |
+
"voz.instalada": "Voice ready! Press Ctrl+M to speak, or turn on \"Listen for TARS\" in the Voice button.",
|
| 824 |
+
"voz.erro_instalar": "Could not install the voice: {erro}",
|
| 825 |
+
"voz.erro_microfone": "Microphone: {erro}",
|
| 826 |
+
"gui.voz_conversa": "Go on, no need to say \"TARS\"...",
|
| 827 |
+
"gui.voz_carregando": "Getting voice ready...",
|
| 828 |
+
"gui.voz_escolher": "Voice",
|
| 829 |
+
"gui.voz_velocidade": "Speech speed",
|
| 830 |
+
"gui.voz_testar": "Hear a sample",
|
| 831 |
+
"voz.nome_invalido": "I don't know the voice \"{nome}\". Voices: {lista}",
|
| 832 |
+
"voz.escolhida": "Voice changed to {nome}.",
|
| 833 |
+
"voz.velocidade_invalida": "Invalid speed: {valor} (use a number like 0.9, 1.0 or 1.2)",
|
| 834 |
+
"voz.velocidade_ok": "Speech speed: {valor}",
|
| 835 |
+
"voz.frase_teste": "Hi! I'm Gargantua, speaking with the {nome} voice. I can open apps, do math and search for you.",
|
| 836 |
+
"voz.lista_titulo": "Voices for the current language (Kokoro):",
|
| 837 |
+
"voz.nao_baixada": "not downloaded",
|
| 838 |
+
"voz.falta_kokoro_onnx": "kokoro-onnx (the natural voice)",
|
| 839 |
+
"voz.falta_idioma": "a voice for this language",
|
| 840 |
+
"anexos.anexado": "attached: {resumo}",
|
| 841 |
+
"anexos.cortado": "the file is long: only the first part goes to the AI",
|
| 842 |
+
"anexos.nenhum": "Nothing attached.",
|
| 843 |
+
"anexos.uso": "Usage: /attach <file> [file...] (use quotes if the path has spaces)",
|
| 844 |
+
"anexos.uso_remover": "Usage: /detach <number> or /detach all",
|
| 845 |
+
"anexos.removidos": "Attachments removed. {n} left.",
|
| 846 |
+
"anexos.escreva_pedido": "Attached. Now type what you want done with it.",
|
| 847 |
+
"anexos.descrevendo": "{arquivo}: the chosen AI cannot see images, so {visao} is describing it...",
|
| 848 |
+
"jp.janela": "openTARS",
|
| 849 |
+
"jp.nova": "New chat",
|
| 850 |
+
"jp.buscar": "Search chats",
|
| 851 |
+
"jp.grupo.hoje": "Today",
|
| 852 |
+
"jp.grupo.ontem": "Yesterday",
|
| 853 |
+
"jp.grupo.semana": "This week",
|
| 854 |
+
"jp.grupo.antes": "Older",
|
| 855 |
+
"jp.sem_conversas": "Your chats show up here.",
|
| 856 |
+
"jp.nenhum_resultado": "Nothing found.",
|
| 857 |
+
"jp.memoria": "Memory",
|
| 858 |
+
"jp.config": "Settings",
|
| 859 |
+
"jp.nova_versao": "New version: {versao}",
|
| 860 |
+
"jp.nada_sem_clique": "Nothing is installed without your click.",
|
| 861 |
+
"jp.atualizar": "Update",
|
| 862 |
+
"jp.atualizar_copiar": "Copy the command",
|
| 863 |
+
"jp.reiniciar_aviso": "openTARS was updated. Restart to use the new version.",
|
| 864 |
+
"jp.reiniciar": "Restart now",
|
| 865 |
+
"jp.instale_nas_config": "Install it in Settings > Updates.",
|
| 866 |
+
"jp.ver_atualizacao": "See the update",
|
| 867 |
+
"jp.baixando": "Downloading… {pct}%",
|
| 868 |
+
"jp.conferindo": "Checking the file…",
|
| 869 |
+
"jp.atualizado": "Done. openTARS will restart by itself in a moment.",
|
| 870 |
+
"jp.comando_atualizar": "There is a new version. Close openTARS and run the install command again (already copied; on Windows, in PowerShell): {comando}",
|
| 871 |
+
"jp.atualizar_erro": "Couldn't update ({motivo}). Nothing was changed.",
|
| 872 |
+
"jp.motivo.hash": "the file didn't match its SHA-256",
|
| 873 |
+
"jp.motivo.rede": "no connection",
|
| 874 |
+
"jp.motivo.endereco": "address not allowed",
|
| 875 |
+
"jp.motivo.sem_appimage": "this openTARS isn't an AppImage; use the .deb package",
|
| 876 |
+
"jp.motivo.formato": "unknown format",
|
| 877 |
+
"jp.motivo.cancelado": "cancelled",
|
| 878 |
+
"jp.sem_titulo": "New chat",
|
| 879 |
+
"jp.pronto": "ready to help",
|
| 880 |
+
"jp.em_andamento": "task in progress",
|
| 881 |
+
"jp.etapa_de": "task in progress · step {atual} of {total}",
|
| 882 |
+
"jp.parar": "Stop",
|
| 883 |
+
"jp.parando": "Stopping…",
|
| 884 |
+
"jp.modelo_auto": "Automatic · local",
|
| 885 |
+
"jp.modelo_local": "{modelo} · local",
|
| 886 |
+
"jp.modelo_nuvem": "{modelo} · cloud",
|
| 887 |
+
"jp.escolher_modelo": "Choose the AI",
|
| 888 |
+
"jp.menu_auto": "Automatic (TARS chooses)",
|
| 889 |
+
"jp.menu_local": "On your computer",
|
| 890 |
+
"jp.menu_nuvem": "Cloud (you turned it on in Settings)",
|
| 891 |
+
"jp.menu_sem_nuvem": "Cloud is off",
|
| 892 |
+
"jp.entrada_ph": "Ask TARS for something…",
|
| 893 |
+
"jp.anexar": "Attach a file",
|
| 894 |
+
"jp.enviar": "Send",
|
| 895 |
+
"jp.falar": "Speak",
|
| 896 |
+
"jp.remover_anexo": "Remove attachment",
|
| 897 |
+
"jp.voz_segurar": "Hold",
|
| 898 |
+
"jp.voz_continua": "Continuous",
|
| 899 |
+
"jp.voz_tars": "“TARS”",
|
| 900 |
+
"jp.voz_modo": "Voice mode",
|
| 901 |
+
"jp.rodape_local": "Everything runs on your computer. Nothing leaves it.",
|
| 902 |
+
"jp.rodape_nuvem": "This chat uses the cloud you turned on: what you write goes to {provedor}.",
|
| 903 |
+
"jp.anexos_erro": "Couldn't attach: {erro}",
|
| 904 |
+
"jp.escolher_arquivos": "Choose files",
|
| 905 |
+
"jp.vazio_titulo": "What do you need?",
|
| 906 |
+
"jp.vazio_texto": "Ask in your own words. I open programs, click, type, search and run commands. Before deleting or changing something important, I ask.",
|
| 907 |
+
"jp.ex1": "Open the browser and look up the supermarket hours",
|
| 908 |
+
"jp.ex2": "Organize my Downloads folder by type",
|
| 909 |
+
"jp.ex3": "What time is it and what's the temperature here?",
|
| 910 |
+
"jp.ollama_fora": "Ollama isn't answering. Open Ollama and try again.",
|
| 911 |
+
"jp.sem_modelo": "No AI installed. Download Gargantua in Settings > General.",
|
| 912 |
+
"jp.conversa_apagada": "Chat deleted.",
|
| 913 |
+
"jp.apagar_conversa": "Delete this chat",
|
| 914 |
+
"jp.renomear": "Rename",
|
| 915 |
+
"jp.etapas": "Steps",
|
| 916 |
+
"jp.etapas_contagem": "{feitas} of {total}",
|
| 917 |
+
"jp.espera_voce": "waiting for you",
|
| 918 |
+
"jp.aprov_etiqueta": "Dangerous command",
|
| 919 |
+
"jp.aprov_pergunta": "May I run this command?",
|
| 920 |
+
"jp.permitir": "Allow",
|
| 921 |
+
"jp.negar": "Deny",
|
| 922 |
+
"jp.ver_lista": "See all",
|
| 923 |
+
"jp.e_mais": "and {n} more lines",
|
| 924 |
+
"jp.aprov_permitido": "You allowed it.",
|
| 925 |
+
"jp.aprov_negado": "You denied it. Nothing was done.",
|
| 926 |
+
"jp.raciocinio": "Reasoning",
|
| 927 |
+
"jp.voltar_conversa": "Back to chat",
|
| 928 |
+
"tv.ativo": "Microphone on · voice processed on your computer",
|
| 929 |
+
"tv.silenciado": "Microphone muted",
|
| 930 |
+
"tv.voltar_texto": "Back to text",
|
| 931 |
+
"tv.carregando": "Getting the voice ready…",
|
| 932 |
+
"tv.ouvindo": "Listening…",
|
| 933 |
+
"tv.chamado": "Yes? Go ahead…",
|
| 934 |
+
"tv.conversa": "You can keep going, no need to say “TARS”…",
|
| 935 |
+
"tv.transcrevendo": "Understanding what you said…",
|
| 936 |
+
"tv.falando": "Speaking…",
|
| 937 |
+
"tv.pensando": "Thinking…",
|
| 938 |
+
"tv.parado": "Stopped",
|
| 939 |
+
"tv.sub_ouvindo": "Mic on, all local: speak any time, no need to say “TARS”.",
|
| 940 |
+
"tv.sub_tars": "Mic on, all local: say “TARS” and your request. E.g. “TARS, open Firefox”.",
|
| 941 |
+
"tv.sub_segurar": "Hold the microphone button while you speak.",
|
| 942 |
+
"tv.voce_disse": "You said",
|
| 943 |
+
"tv.segurar": "Hold to talk",
|
| 944 |
+
"tv.continua": "Continuous chat",
|
| 945 |
+
"tv.tars": "“TARS” word",
|
| 946 |
+
"tv.silenciar": "Mute the microphone",
|
| 947 |
+
"tv.reativar": "Turn the microphone on",
|
| 948 |
+
"tv.parar": "Stop",
|
| 949 |
+
"tv.rodape": "{idiomas} · local voice",
|
| 950 |
+
"tv.idiomas": "pt-BR and English",
|
| 951 |
+
"tv.falta": "The voice isn't ready yet (missing: {itens}). Install it in Settings > Voice.",
|
| 952 |
+
"tv.erro": "Microphone problem: {erro}",
|
| 953 |
+
"tv.abrir_voz": "Open Settings > Voice",
|
| 954 |
+
"cfg.voltar": "Back to chat",
|
| 955 |
+
"cfg.nav.geral": "General",
|
| 956 |
+
"cfg.nav.voz": "Voice",
|
| 957 |
+
"cfg.nav.memoria": "Memory and privacy",
|
| 958 |
+
"cfg.nav.nuvem": "Cloud (optional)",
|
| 959 |
+
"cfg.nav.atualizacoes": "Updates",
|
| 960 |
+
"cfg.nav.sobre": "About",
|
| 961 |
+
"cfg.codigo_aberto": "open source and free",
|
| 962 |
+
"cfg.geral.titulo": "General",
|
| 963 |
+
"cfg.geral.sub": "Language and the AI that runs on your computer.",
|
| 964 |
+
"cfg.idioma": "Language",
|
| 965 |
+
"cfg.idioma_sub": "Changes the window, the voice and the language TARS answers in. The window reopens by itself.",
|
| 966 |
+
"cfg.ia": "AI on your computer",
|
| 967 |
+
"cfg.ia_sub": "Ollama runs the models here. Nothing leaves your computer.",
|
| 968 |
+
"cfg.ollama_fora": "Ollama isn't responding. Open Ollama and come back.",
|
| 969 |
+
"cfg.ollama_ok": "Ollama {versao} is running, with {n} model(s) installed.",
|
| 970 |
+
"cfg.gargantua_ok": "Gargantua (the openTARS model) is installed.",
|
| 971 |
+
"cfg.gargantua_falta": "Gargantua isn't installed yet.",
|
| 972 |
+
"cfg.baixar_gargantua": "Download Gargantua",
|
| 973 |
+
"cfg.baixando": "Downloading… {pct}%",
|
| 974 |
+
"cfg.baixar_erro": "Couldn't download: {erro}",
|
| 975 |
+
"cfg.voz.titulo": "Voice",
|
| 976 |
+
"cfg.voz.sub": "Talk to TARS and hear the answers. Everything runs on your computer.",
|
| 977 |
+
"cfg.voz.motor": "Recognition and speech",
|
| 978 |
+
"cfg.voz.motor_sub": "Speech recognition and the TARS voice need a one-time download.",
|
| 979 |
+
"cfg.voz.falta": "Still to install: {itens}.",
|
| 980 |
+
"cfg.voz.pronta": "Voice is ready.",
|
| 981 |
+
"cfg.voz.instalar": "Install voice",
|
| 982 |
+
"cfg.voz.instalando": "Installing… this can take a few minutes.",
|
| 983 |
+
"cfg.voz.instalada": "Voice installed.",
|
| 984 |
+
"cfg.voz.erro": "Couldn't install: {erro}",
|
| 985 |
+
"cfg.voz.fala": "Speech",
|
| 986 |
+
"cfg.voz.responder_falando": "Answer out loud",
|
| 987 |
+
"cfg.voz.voz": "Voice",
|
| 988 |
+
"cfg.voz.velocidade": "Speed",
|
| 989 |
+
"cfg.voz.testar": "Test the voice",
|
| 990 |
+
"cfg.voz.nota": "Portuguese speech works, but it is less natural than English.",
|
| 991 |
+
"cfg.memoria.titulo": "Memory and privacy",
|
| 992 |
+
"cfg.memoria.sub": "What TARS keeps, and what you can erase at any time.",
|
| 993 |
+
"cfg.memoria.lembra": "What TARS remembers",
|
| 994 |
+
"cfg.memoria.lembra_sub": "TARS notes useful things (your browser, your folders). Here you see everything and erase what you want.",
|
| 995 |
+
"cfg.memoria.vazia": "Nothing saved yet.",
|
| 996 |
+
"cfg.memoria.esquecer": "Forget this",
|
| 997 |
+
"cfg.memoria.apagar_tudo": "Erase all memory",
|
| 998 |
+
"cfg.memoria.apagada": "Memory erased.",
|
| 999 |
+
"cfg.dados.titulo": "Your data",
|
| 1000 |
+
"cfg.dados.sub": "Conversations and memory stay only on this computer.",
|
| 1001 |
+
"cfg.dados.exportar": "Export conversations",
|
| 1002 |
+
"cfg.dados.apagar_historico": "Erase history",
|
| 1003 |
+
"cfg.dados.apagar_tudo": "Erase everything",
|
| 1004 |
+
"cfg.dados.exportado": "{n} conversation(s) exported.",
|
| 1005 |
+
"cfg.dados.historico_apagado": "{n} conversation(s) erased.",
|
| 1006 |
+
"cfg.dados.tudo_apagado": "History and memory erased.",
|
| 1007 |
+
"cfg.dados.onde": "openTARS sends no telemetry or statistics. The only optional connection is the cloud, if you turn it on.",
|
| 1008 |
+
"cfg.confirmar": "Confirm?",
|
| 1009 |
+
"cfg.nuvem.titulo": "Cloud (optional)",
|
| 1010 |
+
"cfg.nuvem.sub": "For when your computer can't handle a big model. On by default; without SearXNG, the search opens in the browser.",
|
| 1011 |
+
"cfg.nuvem.cartao": "Provider",
|
| 1012 |
+
"cfg.nuvem.cartao_sub": "Any service compatible with the OpenAI API. You use your own key.",
|
| 1013 |
+
"cfg.nuvem.ativar": "Use the cloud (shows up in the model picker)",
|
| 1014 |
+
"cfg.nuvem.a_confirmar": "This address and the free limits haven't been confirmed in the official documentation yet. Check before using.",
|
| 1015 |
+
"cfg.nuvem.endereco": "Address",
|
| 1016 |
+
"cfg.nuvem.chave": "Key",
|
| 1017 |
+
"cfg.nuvem.chave_nota": "The key stays only on this computer, in a protected file, and is never shown. With the cloud, what you write goes to the provider.",
|
| 1018 |
+
"cfg.nuvem.chave_salva": "key saved (leave empty to keep it)",
|
| 1019 |
+
"cfg.nuvem.testar": "Test",
|
| 1020 |
+
"cfg.nuvem.salvar": "Save",
|
| 1021 |
+
"cfg.nuvem.testando": "Testing…",
|
| 1022 |
+
"cfg.nuvem.ok": "It worked.",
|
| 1023 |
+
"cfg.nuvem.salva": "Saved.",
|
| 1024 |
+
"cfg.nuvem.erro_chave": "The provider rejected the key.",
|
| 1025 |
+
"cfg.nuvem.erro_endereço": "That address doesn't look right.",
|
| 1026 |
+
"cfg.nuvem.erro_rede": "Couldn't connect.",
|
| 1027 |
+
"cfg.atual.titulo": "Updates",
|
| 1028 |
+
"cfg.atual.sub": "openTARS tells you when there's a new version. Nothing is installed without your click.",
|
| 1029 |
+
"cfg.atual.versao": "You are on {versao}",
|
| 1030 |
+
"cfg.atual.nunca": "Haven't checked in this session yet.",
|
| 1031 |
+
"cfg.atual.procurar": "Check now",
|
| 1032 |
+
"cfg.atual.procurando": "Checking…",
|
| 1033 |
+
"cfg.atual.em_dia": "You are on the latest version (or offline right now).",
|
| 1034 |
+
"cfg.atual.nova": "There is a new version: {versao}. Click Update to download, check and install it.",
|
| 1035 |
+
"cfg.atual.nota": "Every downloaded file is verified (SHA-256) before installing.",
|
| 1036 |
+
"cfg.sobre.titulo": "About",
|
| 1037 |
+
"cfg.sobre.sub": "openTARS, open source and free.",
|
| 1038 |
+
"cfg.sobre.texto": "openTARS controls the Linux desktop with an AI that runs on your computer: it opens apps, moves windows, reads the screen and carries out tasks by voice or text.",
|
| 1039 |
+
"cfg.sobre.local": "Everything runs on your computer. Nothing leaves here.",
|
| 1040 |
+
"cfg.nav.rotinas": "Routines",
|
| 1041 |
+
"rot.q_diaria": "Every day at {hora}",
|
| 1042 |
+
"rot.q_semanal": "{dias} at {hora}",
|
| 1043 |
+
"rot.q_intervalo": "Every {n} minutes",
|
| 1044 |
+
"rot.q_uma_vez": "On {data} at {hora}",
|
| 1045 |
+
"rot.dia_seg": "Mon",
|
| 1046 |
+
"rot.dia_ter": "Tue",
|
| 1047 |
+
"rot.dia_qua": "Wed",
|
| 1048 |
+
"rot.dia_qui": "Thu",
|
| 1049 |
+
"rot.dia_sex": "Fri",
|
| 1050 |
+
"rot.dia_sab": "Sat",
|
| 1051 |
+
"rot.dia_dom": "Sun",
|
| 1052 |
+
"rot.titulo": "Routines",
|
| 1053 |
+
"rot.sub": "TARS runs a request by itself at the time you choose. It only runs while openTARS is open.",
|
| 1054 |
+
"rot.nova": "New routine",
|
| 1055 |
+
"rot.editar_titulo": "Edit routine",
|
| 1056 |
+
"rot.vazia": "No routines yet.",
|
| 1057 |
+
"rot.nome": "Name",
|
| 1058 |
+
"rot.nome_ph": "E.g.: Morning news",
|
| 1059 |
+
"rot.pedido": "What TARS should do",
|
| 1060 |
+
"rot.pedido_ph": "E.g.: open my favorite newspaper's website",
|
| 1061 |
+
"rot.quando": "When",
|
| 1062 |
+
"rot.tipo_diaria": "Every day",
|
| 1063 |
+
"rot.tipo_semanal": "Days of the week",
|
| 1064 |
+
"rot.tipo_intervalo": "Every so many minutes",
|
| 1065 |
+
"rot.tipo_uma_vez": "Once",
|
| 1066 |
+
"rot.hora": "Time (e.g.: 08:30)",
|
| 1067 |
+
"rot.minutos": "Minutes (5 or more)",
|
| 1068 |
+
"rot.data": "Date and time (YYYY-MM-DD HH:MM)",
|
| 1069 |
+
"rot.perm_titulo": "What it can do without asking",
|
| 1070 |
+
"rot.perm_nota": "Anything not checked makes the routine stop and warn you. With nothing checked, it does no risky action. Purchases and payments are never pre-approved.",
|
| 1071 |
+
"rot.perm_apagar": "Delete files",
|
| 1072 |
+
"rot.perm_enviar": "Send or publish (git push, email, upload)",
|
| 1073 |
+
"rot.perm_instalar": "Install or change the system (sudo, apt, pip)",
|
| 1074 |
+
"rot.salvar": "Save routine",
|
| 1075 |
+
"rot.cancelar": "Cancel",
|
| 1076 |
+
"rot.editar": "Edit",
|
| 1077 |
+
"rot.apagar": "Delete",
|
| 1078 |
+
"rot.rodar_agora": "Run now",
|
| 1079 |
+
"rot.ligada": "On",
|
| 1080 |
+
"rot.pendente": "Waiting for your approval (created by the AI)",
|
| 1081 |
+
"rot.aprovar": "Approve and turn on",
|
| 1082 |
+
"rot.descartar": "Discard",
|
| 1083 |
+
"rot.proxima": "Next: {quando}",
|
| 1084 |
+
"rot.sem_proxima": "No next run",
|
| 1085 |
+
"rot.ultima_ok": "Last time: {quando}, done.",
|
| 1086 |
+
"rot.ultima_parou": "Last time: {quando}, stopped: {detalhe}",
|
| 1087 |
+
"rot.ultima_erro": "Last time: {quando}, did not finish: {detalhe}",
|
| 1088 |
+
"rot.ultima_perdida": "Skipped at {quando} (the computer or openTARS was off).",
|
| 1089 |
+
"rot.erro_nome": "Give the routine a name.",
|
| 1090 |
+
"rot.erro_pedido": "Write what to do (up to 500 characters).",
|
| 1091 |
+
"rot.erro_limite": "Too many routines: delete one.",
|
| 1092 |
+
"rot.erro_tipo": "Choose when to run.",
|
| 1093 |
+
"rot.erro_hora": "The time must look like 08:30.",
|
| 1094 |
+
"rot.erro_dias": "Check at least one day.",
|
| 1095 |
+
"rot.erro_intervalo": "The minimum interval is 5 minutes.",
|
| 1096 |
+
"rot.erro_data": "The date must look like 2026-10-31 09:00.",
|
| 1097 |
+
"rot.aviso_ok": "The routine “{nome}” finished.",
|
| 1098 |
+
"rot.aviso_parou": "The routine “{nome}” stopped: it needed permission for {comando}",
|
| 1099 |
+
"rot.aviso_perdida": "The routine “{nome}” was skipped: the computer (or openTARS) was off at {hora}.",
|
| 1100 |
+
"rot.aviso_erro": "The routine “{nome}” did not finish: {detalhe}",
|
| 1101 |
+
"rot.aviso_ia": "The AI created the routine “{nome}”. Open Settings → Routines to approve it.",
|
| 1102 |
+
"rot.titulo_conversa": "↻ {nome}",
|
| 1103 |
+
"rot.pedido_conversa": "Routine “{nome}”: {pedido}",
|
| 1104 |
+
"rot.tray_abrir": "Open openTARS",
|
| 1105 |
+
"rot.tray_sair": "Quit",
|
| 1106 |
+
"rot.tray_dica": "openTARS: routines on, running in the background",
|
| 1107 |
+
"rot.fundo_nota": "With routines on, closing the window keeps openTARS in the system tray (if there is one). To quit for good, use Quit on the icon.",
|
| 1108 |
+
"rot.ocupado": "TARS was busy at the time of the routine “{nome}”: it waits up to 10 minutes.",
|
| 1109 |
+
"cfg.mascote": "KIPP, the mascot",
|
| 1110 |
+
"cfg.mascote_sub": "KIPP is the monolith that walks around the chat, gives tips and reacts to what the AI does.",
|
| 1111 |
+
"cfg.mascote_mostrar": "Show KIPP",
|
| 1112 |
+
"mascote.trabalhando": "working…",
|
| 1113 |
+
"mascote.ops": "Oops, that one didn't work.",
|
| 1114 |
+
"mascote.pronto": "Done!",
|
| 1115 |
+
"mascote.plano": "{n} steps to go.",
|
| 1116 |
+
"mascote.permissao": "TARS needs your permission to continue.",
|
| 1117 |
+
"mascote.menu_dica": "Give me a tip",
|
| 1118 |
+
"mascote.menu_esconder": "Hide KIPP",
|
| 1119 |
+
"mascote.dica1": "Ctrl+N starts a new chat, and Ctrl+K searches the old ones.",
|
| 1120 |
+
"mascote.dica2": "If TARS is doing something wrong, press Esc: it stops right away.",
|
| 1121 |
+
"mascote.dica3": "Before deleting or changing anything important, TARS always asks. You decide.",
|
| 1122 |
+
"mascote.dica4": "Ctrl+M turns on the microphone. You can also wake it by saying “TARS”.",
|
| 1123 |
+
"mascote.dica5": "Ask in your own words: “open the browser and look up the market hours”.",
|
| 1124 |
+
"mascote.dica6": "TARS can remember things about you. Say “remember that I prefer…” and it keeps it, on this computer only.",
|
| 1125 |
+
"mascote.dica7": "You can attach an image or a file and ask about it.",
|
| 1126 |
+
"mascote.dica8": "Everything runs on your computer: nothing you write leaves it, unless you turn on the cloud.",
|
| 1127 |
+
"mascote.dica9": "In Settings you can create routines: TARS does a task by itself at the time you choose.",
|
| 1128 |
+
"mascote.dica10": "Type /modelo auto and TARS picks the best model for each request.",
|
| 1129 |
+
"term.slogan": "local AI assistant for Linux",
|
| 1130 |
+
"term.bem_vindo": "Welcome to openTARS!",
|
| 1131 |
+
"term.rotulo_ollama": "ollama:",
|
| 1132 |
+
"term.rotulo_modelo": "model:",
|
| 1133 |
+
"term.ollama_online": "connected ({host})",
|
| 1134 |
+
"term.ollama_offline": "offline ({host}) · start it with: sudo systemctl start ollama",
|
| 1135 |
+
"term.modelo_auto": "automatic",
|
| 1136 |
+
"term.modelo_fixo": "{modelo} (pinned)",
|
| 1137 |
+
"term.modo_fixo": "pinned",
|
| 1138 |
+
"term.parar": "ctrl+c to stop",
|
| 1139 |
+
"term.ate_logo": "See you.",
|
| 1140 |
+
"modo.lite.nome": "Lite",
|
| 1141 |
+
"modo.lite.desc": "Just the essentials: chat, talk and attach files. Everything else is automatic.",
|
| 1142 |
+
"modo.base.nome": "Base",
|
| 1143 |
+
"modo.base.desc": "Good for most people: history, memory, voice, routines and Probes.",
|
| 1144 |
+
"modo.pro.nome": "Pro",
|
| 1145 |
+
"modo.pro.desc": "Everything in Base, plus advanced settings and diagnostics.",
|
| 1146 |
+
"cfg.modo": "Mode",
|
| 1147 |
+
"cfg.modo_sub": "How much of the window you want to see. Switch any time; nothing is deleted.",
|
| 1148 |
+
"cfg.nav.avancado": "Advanced settings",
|
| 1149 |
+
"cfg.nav.diagnostico": "Diagnostics",
|
| 1150 |
+
"cfg.avancado.titulo": "Advanced settings",
|
| 1151 |
+
"cfg.avancado.sub": "Only used in Pro mode. Changing these can make the AI worse: Gargantua was trained with the defaults.",
|
| 1152 |
+
"cfg.av.automatico": "Automatic",
|
| 1153 |
+
"cfg.av.temperatura": "Temperature",
|
| 1154 |
+
"cfg.av.temperatura_sub": "How much the answer varies. Lower is more predictable (the default is 0.1).",
|
| 1155 |
+
"cfg.av.contexto": "Context",
|
| 1156 |
+
"cfg.av.contexto_sub": "How much of the conversation the AI keeps at once, in tokens. More context uses more video memory.",
|
| 1157 |
+
"cfg.av.instrucoes": "Extra instructions",
|
| 1158 |
+
"cfg.av.instrucoes_sub": "Sent to the AI in every conversation, together with the memory. They never allow deleting, sending or installing without your confirmation.",
|
| 1159 |
+
"cfg.av.ferramentas": "Tools",
|
| 1160 |
+
"cfg.av.ferramentas_sub": "Untick what the AI cannot use. It still sees the tool, but openTARS refuses to run it.",
|
| 1161 |
+
"cfg.av.salvar": "Save",
|
| 1162 |
+
"cfg.av.salvo": "Saved.",
|
| 1163 |
+
"cfg.av.restaurar": "Back to defaults",
|
| 1164 |
+
"cfg.av.so_pro": "You are in {modo} mode: these settings are kept, but only used in Pro.",
|
| 1165 |
+
"cfg.diag.titulo": "Diagnostics",
|
| 1166 |
+
"cfg.diag.sub": "What openTARS did and whether the system is in order. Nothing here leaves your computer.",
|
| 1167 |
+
"cfg.diag.log": "Tools used",
|
| 1168 |
+
"cfg.diag.log_sub": "The last tools the AI called, from the log in ~/.tars_log/tars.log.",
|
| 1169 |
+
"cfg.diag.vazio": "No tool logged yet.",
|
| 1170 |
+
"cfg.diag.atualizar": "Refresh",
|
| 1171 |
+
"cfg.diag.ambiente": "Check the system",
|
| 1172 |
+
"cfg.diag.ambiente_sub": "Ollama, models, screen, microphone and permissions, the same as the opentars --diagnostico command.",
|
| 1173 |
+
"cfg.diag.conferir": "Check now",
|
| 1174 |
+
"cfg.diag.conferindo": "Checking…",
|
| 1175 |
+
"pu.passo.modo": "Mode",
|
| 1176 |
+
"pu.modo.titulo": "How much do you want to see?",
|
| 1177 |
+
"pu.modo.texto": "Choose the window mode. You can change it later in Settings > General.",
|
| 1178 |
+
"pu.garg.nome_lite": "Gargantua Lite",
|
| 1179 |
+
"pu.garg.lite_nota": "This computer has no graphics card with 4 GB and little memory: we download Gargantua Lite (0.6 GB, with vision), which is lighter and makes a few more mistakes. It looks at the screen to find buttons, with less precision than Gargantua 2 (1.6 GB).",
|
| 1180 |
+
"cmd.sempre": [
|
| 1181 |
+
"always",
|
| 1182 |
+
"a"
|
| 1183 |
+
],
|
| 1184 |
+
"perigo.pergunta_sessao": "Run it anyway? (y/N, or \"always\" for this command in this session)",
|
| 1185 |
+
"codigo.editar": "The AI wants to change {arquivo}:",
|
| 1186 |
+
"codigo.pergunta": "Apply it? (y/N, or \"always\" for edits in this folder this session)",
|
| 1187 |
+
"codigo.pergunta_fora": "This file is outside the project folder. Apply it? (y/N)",
|
| 1188 |
+
"cli.contexto": "~{usados} of {total} context tokens ({modelo}). The count is approximate.",
|
| 1189 |
+
"cli.contexto_cheio": "The context is filling up: /compact summarizes the start of the conversation.",
|
| 1190 |
+
"cli.sem_conversas": "No saved conversations yet.",
|
| 1191 |
+
"cli.qual_conversa": "Conversation number (Enter cancels):",
|
| 1192 |
+
"cli.retomada": "Conversation resumed: {titulo} ({n} requests).",
|
| 1193 |
+
"cli.shell_demorou": "The command took over 2 minutes and was stopped.",
|
| 1194 |
+
"cli.shell_sem_saida": "(no output)",
|
| 1195 |
+
"cli.compactando": "Summarizing the start of the conversation…",
|
| 1196 |
+
"cli.compactada": "Done: ~{antes} → ~{depois} tokens. The last requests were kept whole.",
|
| 1197 |
+
"cli.nada_a_compactar": "The conversation is still short: nothing to summarize.",
|
| 1198 |
+
"cli.modo.perguntar": "Ask mode: openTARS asks before changing files and before risky commands.",
|
| 1199 |
+
"cli.modo.plano": "Plan mode: the AI only describes what it would do. Nothing that changes anything runs.",
|
| 1200 |
+
"cli.modo.automatico": "Auto mode: file edits inside this folder do not ask. Deleting, sending and installing still ask.",
|
| 1201 |
+
"cli.modo_uso": "Use /mode ask, /mode plan or /mode auto.",
|
| 1202 |
+
"cli.desfeito": "Undone: {arquivos}",
|
| 1203 |
+
"cli.nada_a_desfazer": "No edits to undo in this session.",
|
| 1204 |
+
"cli.agents_criado": "Created {arquivo}. Edit it freely: it is included in every conversation in this folder.",
|
| 1205 |
+
"cli.agents_existe": "There is already an AGENTS.md here; I left it alone.",
|
| 1206 |
+
"cli.agents_lido": "Reading the project instructions in {arquivo}",
|
| 1207 |
+
"cli.status_contexto": "context {pct}%",
|
| 1208 |
+
"cli.status_modo.plano": "plan mode",
|
| 1209 |
+
"cli.status_modo.automatico": "auto mode",
|
| 1210 |
+
"cli.plano_titulo": "Plan (nothing was run):",
|
| 1211 |
+
"cli.print_vazio": "No request: use opentars -p \"request\" or send the text through stdin.",
|
| 1212 |
+
"jp.probes": "Probes",
|
| 1213 |
+
"cfg.nav.probes": "Probes",
|
| 1214 |
+
"probes.titulo": "Probes",
|
| 1215 |
+
"probes.sub": "Small watchers that run in the background, even with the window closed, and tell you when something matters. They only look: nothing on your computer changes unless you choose it.",
|
| 1216 |
+
"probes.servico": "On and off",
|
| 1217 |
+
"probes.baixar_lite": "Download Gargantua Lite (0.6 GB, with vision)",
|
| 1218 |
+
"probes.parar_tudo": "Stop all",
|
| 1219 |
+
"probes.nova": "Create a Probe",
|
| 1220 |
+
"probes.nova_sub": "Three steps: pick what to watch, fill in what it asks and check the sentence of what it will do.",
|
| 1221 |
+
"probes.missao_ph": "E.g. keep an eye on Downloads and tell me when a .deb installer shows up, at most twice a day",
|
| 1222 |
+
"probes.entender": "Understand the mission",
|
| 1223 |
+
"probes.entendendo": "Gargantua is reading the mission…",
|
| 1224 |
+
"probes.confira": "Check the plan. It only reads; the actions below are optional and up to you.",
|
| 1225 |
+
"probes.r_olha": "Watches: {onde}",
|
| 1226 |
+
"probes.r_quando": "Checks: {quando}",
|
| 1227 |
+
"probes.r_avisa": "Tells you when: {quando} (at most {n} a day)",
|
| 1228 |
+
"probes.r_nao_faz": "Will not: {lista}",
|
| 1229 |
+
"probes.acao_mover": "Move the files it finds to this folder (without asking)",
|
| 1230 |
+
"probes.destino_ph": "~/Installers",
|
| 1231 |
+
"probes.acao_lixeira": "Send the files it finds to the trash (asks every time)",
|
| 1232 |
+
"probes.criado": "Probe \"{nome}\" created, turned off. Turn it on in its card.",
|
| 1233 |
+
"probes.recusou": "A Probe only reads and tells you, so this mission was refused: {motivo}",
|
| 1234 |
+
"probes.proibido": "No Probe reads {caminho}: keys, passwords and browser data are off limits.",
|
| 1235 |
+
"probes.erro_json": "The model did not return a plan. Try writing the mission another way.",
|
| 1236 |
+
"probes.erro_ferramentas": "The plan does not say what to read. Name the folder, file or repository.",
|
| 1237 |
+
"probes.erro_sem_modelo": "No Gargantua installed for Probes.",
|
| 1238 |
+
"probes.erro_sem_resposta": "Ollama did not answer. Is it running?",
|
| 1239 |
+
"probes.erro_missao": "Write the mission (up to 500 characters).",
|
| 1240 |
+
"probes.erro_limite": "Limit reached: up to 10 Probes, and at most 5 on.",
|
| 1241 |
+
"probes.erro_destino": "The destination folder must exist and be inside your home folder.",
|
| 1242 |
+
"probes.check_dia": "every day at {hora}",
|
| 1243 |
+
"probes.check_mudar": "when something changes (looks every 5 minutes)",
|
| 1244 |
+
"probes.check_minutos": "every {n} minutes",
|
| 1245 |
+
"probes.tem_mover": "moves what it finds to {pasta}",
|
| 1246 |
+
"probes.tem_lixeira": "asks to send to the trash",
|
| 1247 |
+
"probes.ligado": "On",
|
| 1248 |
+
"probes.rodar_agora": "Run now",
|
| 1249 |
+
"probes.apagar": "Delete",
|
| 1250 |
+
"probes.rodando_agora": "Running the Probe…",
|
| 1251 |
+
"probes.nada_a_avisar": "Ran: nothing to tell you now.",
|
| 1252 |
+
"probes.sem_decisao": "Ran, but the model did not decide. Try again.",
|
| 1253 |
+
"probes.ligue_o_servico": "On. For it to run by itself, also turn on the service above.",
|
| 1254 |
+
"probes.pede": "The Probe \"{nome}\" wants to send to the trash: {arquivo}",
|
| 1255 |
+
"probes.permitir": "Send to trash",
|
| 1256 |
+
"probes.negar": "Deny",
|
| 1257 |
+
"probes.lixeira_falhou": "It did not go to the trash: {motivo}",
|
| 1258 |
+
"probes.h_movidos": "{quando} · moved {n} file(s)",
|
| 1259 |
+
"probes.h_lixeira": "{quando} · {arquivo} went to the trash (you approved)",
|
| 1260 |
+
"probes.h_negado": "{quando} · {arquivo} stayed (denied or no answer)",
|
| 1261 |
+
"probes.h_calado": "(not shown: daily limit)",
|
| 1262 |
+
"probes.nota": "A Probe only reads: folders, files, programs, git repositories, public pages and feeds (at most one visit every 15 minutes) and the state of this computer. Keys, passwords and browser data are off limits; what it reads is data, never instructions. Moving only happens if you turned it on; sending to the trash asks every time and, with no answer in 30 minutes, it is denied.",
|
| 1263 |
+
"probes.titulo_aviso": "Probe · {nome}",
|
| 1264 |
+
"probes.movidos": "Moved {n} file(s).",
|
| 1265 |
+
"probes.aprovar": "{n} file(s) waiting for you to approve the trash in openTARS (Probes).",
|
| 1266 |
+
"probes.rodaram": "Probes run now: {n}",
|
| 1267 |
+
"nuvem.login.titulo": "Ollama Cloud with your account (recommended)",
|
| 1268 |
+
"nuvem.login.sub": "No API key: you sign in (or create the free account) on the Ollama website, and the credential stays with Ollama itself. openTARS stores nothing.",
|
| 1269 |
+
"nuvem.login.conferindo": "Checking the Ollama account…",
|
| 1270 |
+
"nuvem.login.desconectado": "This Ollama is not linked to any account.",
|
| 1271 |
+
"nuvem.login.conectado": "Signed in as {conta}.",
|
| 1272 |
+
"nuvem.login.modelos": "Cloud models installed: {lista}.",
|
| 1273 |
+
"nuvem.login.sem_modelo": "No cloud model installed yet.",
|
| 1274 |
+
"nuvem.login.entrar": "Sign in with your Ollama account",
|
| 1275 |
+
"nuvem.login.sair": "Sign out",
|
| 1276 |
+
"nuvem.login.baixar": "Download {modelo}",
|
| 1277 |
+
"nuvem.login.esperando": "I opened the Ollama page in the browser. Sign in (or create the account) there; this screen checks by itself.",
|
| 1278 |
+
"nuvem.login.desistiu": "I did not see the sign-in within 5 minutes. Try again whenever you want.",
|
| 1279 |
+
"nuvem.login.erro": "It did not work: {erro}",
|
| 1280 |
+
"nuvem.login.pronto": "Done. To use the cloud, pick {modelo} in the conversation's model picker. It is never picked automatically.",
|
| 1281 |
+
"nuvem.login.nota": "What leaves the computer when you use a cloud model: what you write and the screenshots the AI looks at. The free account has usage limits per session and per week. Local models do not count toward that limit.",
|
| 1282 |
+
"pu.chave.ou_chave": "Or, with an API key (Ollama, Groq or another OpenAI-compatible address):",
|
| 1283 |
+
"pu.pronto.nuvem_conta": "Cloud through your Ollama account (only when you pick the model)",
|
| 1284 |
+
"web.titulo": "Web search (SearXNG)",
|
| 1285 |
+
"web.sub": "The AI searches, reads the results and answers inside the app. It uses SearXNG (a search engine that runs on your computer and asks the public search engines). On by default; without SearXNG, the search opens in the browser.",
|
| 1286 |
+
"web.ligar": "Turn web search on",
|
| 1287 |
+
"web.endereco": "SearXNG address",
|
| 1288 |
+
"web.testar": "Test",
|
| 1289 |
+
"web.ok": "SearXNG answered ({n} results).",
|
| 1290 |
+
"web.erro": "It did not answer: {erro}. To install one here, run opentars --searxng in the terminal.",
|
| 1291 |
+
"web.salva_ligada": "Saved: web search is on.",
|
| 1292 |
+
"web.salva_desligada": "Saved: web search is off. Nothing is sent.",
|
| 1293 |
+
"web.nota": "What leaves: only the search text, which SearXNG passes on to the search engines (Google, Bing, DuckDuckGo...). Pages that are read come in cut and as data, never as instructions. Gargantua does not use these tools (it was not trained with them): pick another model with tools, such as qwen3:8b, to search.",
|
| 1294 |
+
"web.cli.intro": "openTARS web search: a SearXNG only on this machine, at {endereco}.",
|
| 1295 |
+
"web.cli.sem_docker": "Docker not found. Install SearXNG the way you prefer (https://docs.searxng.org), turn on the JSON format and enter its address in Settings > Cloud.",
|
| 1296 |
+
"web.cli.config": "Configuration created at {arquivo} (JSON format on).",
|
| 1297 |
+
"web.cli.pergunta": "Run this command now? (y/N)",
|
| 1298 |
+
"web.cli.nada": "Nothing was done.",
|
| 1299 |
+
"web.cli.nao_respondeu": "SearXNG did not answer within 60 seconds. See: docker logs opentars-searxng",
|
| 1300 |
+
"web.cli.pronto": "Done: SearXNG is running and web search is on.",
|
| 1301 |
+
"avisos.titulo": "Probe alerts",
|
| 1302 |
+
"avisos.limpar": "Clear",
|
| 1303 |
+
"avisos.configurar": "Set up Probes",
|
| 1304 |
+
"avisos.vazio": "No alerts yet. When a Probe finds something, it shows up here and in a notification.",
|
| 1305 |
+
"avisos.dica_bandeja": "openTARS Probes: {n} new alert(s), {ligados} Probe(s) on",
|
| 1306 |
+
"avisos.ver": "See alerts",
|
| 1307 |
+
"avisos.abrir_app": "Open openTARS",
|
| 1308 |
+
"avisos.pausar": "Pause all Probes",
|
| 1309 |
+
"avisos.sair": "Close until I next log in",
|
| 1310 |
+
"probes.r.arquivos": "{n} new file(s): {nomes}",
|
| 1311 |
+
"probes.r.feed": "{n} new item(s): {titulo}",
|
| 1312 |
+
"probes.r.git": "{n} commit(s) today. Latest: {ultimo}",
|
| 1313 |
+
"probes.r.pagina_texto": "Now on the page: \"{texto}\"",
|
| 1314 |
+
"probes.r.pagina_mudou": "The page changed.",
|
| 1315 |
+
"probes.r.sis_bateria": "Battery at {n}% and not charging.",
|
| 1316 |
+
"probes.r.sis_temperatura": "CPU at {n} °C.",
|
| 1317 |
+
"probes.r.sis_cpu": "CPU load at {n}%.",
|
| 1318 |
+
"probes.r.sis_internet": "The internet connection is down.",
|
| 1319 |
+
"probes.r.sis_atualizacoes": "{n} system update(s) waiting.",
|
| 1320 |
+
"probes.r.prog_fechou": "{programa} closed.",
|
| 1321 |
+
"probes.r.prog_abriu": "{programa} opened.",
|
| 1322 |
+
"probes.r.prog_memoria": "{programa} is using {n} MB of memory.",
|
| 1323 |
+
"probes.pp.q_pasta": "a new file with {o_que} shows up",
|
| 1324 |
+
"probes.pp.q_pasta_tudo": "a new file shows up",
|
| 1325 |
+
"probes.pp.n_pasta": "New in {pasta}",
|
| 1326 |
+
"probes.pp.q_web_texto": "\"{texto}\" appears on the page",
|
| 1327 |
+
"probes.pp.q_web": "the page changes",
|
| 1328 |
+
"probes.pp.n_web": "Page {site}",
|
| 1329 |
+
"probes.pp.q_feed": "something new is posted",
|
| 1330 |
+
"probes.pp.n_feed": "News from {site}",
|
| 1331 |
+
"probes.pp.q_sis_bateria": "the battery drops below {n}%",
|
| 1332 |
+
"probes.pp.q_sis_temperatura": "the CPU goes above {n} °C",
|
| 1333 |
+
"probes.pp.q_sis_cpu": "the CPU load goes above {n}%",
|
| 1334 |
+
"probes.pp.q_sis_internet": "the internet goes down",
|
| 1335 |
+
"probes.pp.q_sis_atualizacoes": "there are system updates",
|
| 1336 |
+
"probes.pp.n_sis_bateria": "Battery",
|
| 1337 |
+
"probes.pp.n_sis_temperatura": "Temperature",
|
| 1338 |
+
"probes.pp.n_sis_cpu": "CPU",
|
| 1339 |
+
"probes.pp.n_sis_internet": "Internet",
|
| 1340 |
+
"probes.pp.n_sis_atualizacoes": "Updates",
|
| 1341 |
+
"probes.pp.q_prog_fechou": "{programa} closes",
|
| 1342 |
+
"probes.pp.q_prog_abriu": "{programa} opens",
|
| 1343 |
+
"probes.pp.q_prog_memoria": "{programa} goes above {n} MB of memory",
|
| 1344 |
+
"probes.pp.n_programa": "Program {programa}",
|
| 1345 |
+
"probes.pp.q_git": "there were commits that day",
|
| 1346 |
+
"probes.pp.n_git": "Commits in {repo}",
|
| 1347 |
+
"probes.pp.nao_muda": "does not change, delete or send anything",
|
| 1348 |
+
"probes.estado_ligado": "Probes on · {n} watching",
|
| 1349 |
+
"probes.estado_ligado_sub": "An icon next to the clock shows how many alerts you have; click it to see them. It also starts on its own when you log in.",
|
| 1350 |
+
"probes.estado_iniciando": "Starting…",
|
| 1351 |
+
"probes.estado_iniciando_sub": "The service is starting. If it stays like this, open openTARS again.",
|
| 1352 |
+
"probes.estado_desligado": "Probes off",
|
| 1353 |
+
"probes.estado_desligado_sub": "Nothing runs. Creating your first Probe turns them on, and you can turn them off here any time.",
|
| 1354 |
+
"probes.ligar_servico": "Turn Probes on",
|
| 1355 |
+
"probes.desligar_servico": "Turn off",
|
| 1356 |
+
"probes.passo1": "1 · WHAT TO WATCH?",
|
| 1357 |
+
"probes.passo2": "2 · THE DETAILS",
|
| 1358 |
+
"probes.tipo.pasta": "A folder",
|
| 1359 |
+
"probes.tipo.pasta_ex": "A new file in Downloads, a PDF that arrived",
|
| 1360 |
+
"probes.tipo.web": "A web page",
|
| 1361 |
+
"probes.tipo.web_ex": "A price, a job post, a notice that shows up",
|
| 1362 |
+
"probes.tipo.feed": "News and releases",
|
| 1363 |
+
"probes.tipo.feed_ex": "RSS feed, YouTube channel, GitHub releases",
|
| 1364 |
+
"probes.tipo.sistema": "This computer",
|
| 1365 |
+
"probes.tipo.sistema_ex": "Battery, temperature, internet, updates",
|
| 1366 |
+
"probes.tipo.programa": "A program",
|
| 1367 |
+
"probes.tipo.programa_ex": "Closed, opened or using too much",
|
| 1368 |
+
"probes.tipo.git": "A git project",
|
| 1369 |
+
"probes.tipo.git_ex": "A summary of the day's commits",
|
| 1370 |
+
"probes.tipo.palavras": "In my own words",
|
| 1371 |
+
"probes.tipo.palavras_ex": "Write the mission and Gargantua builds the plan",
|
| 1372 |
+
"probes.f.pasta": "Which folder?",
|
| 1373 |
+
"probes.f.escolher": "Choose…",
|
| 1374 |
+
"probes.f.filtro": "Only some kind? (optional)",
|
| 1375 |
+
"probes.f.filtro_ph": ".deb, .pdf, invoice",
|
| 1376 |
+
"probes.f.filtro_dica": "Extensions or part of the name, separated by commas. Empty: any new file.",
|
| 1377 |
+
"probes.f.url": "Page address",
|
| 1378 |
+
"probes.f.texto": "Tell me when this text appears (optional)",
|
| 1379 |
+
"probes.f.texto_ph": "E.g. In stock",
|
| 1380 |
+
"probes.f.texto_dica": "Empty: tells you when anything on the page changes.",
|
| 1381 |
+
"probes.f.frequencia": "Check the page",
|
| 1382 |
+
"probes.f.min15": "every 15 minutes",
|
| 1383 |
+
"probes.f.min60": "every hour",
|
| 1384 |
+
"probes.f.min360": "every 6 hours",
|
| 1385 |
+
"probes.f.min1440": "once a day",
|
| 1386 |
+
"probes.f.feed": "Feed, channel or repository address",
|
| 1387 |
+
"probes.f.feed_dica": "A GitHub repository becomes its releases feed; a YouTube channel needs the youtube.com/channel/UC… address; any RSS or Atom feed works.",
|
| 1388 |
+
"probes.f.condicao": "Tell me when…",
|
| 1389 |
+
"probes.f.sis_bateria": "the battery is low",
|
| 1390 |
+
"probes.f.sis_temperatura": "the CPU gets hot",
|
| 1391 |
+
"probes.f.sis_cpu": "the CPU is overloaded",
|
| 1392 |
+
"probes.f.sis_internet": "the internet goes down",
|
| 1393 |
+
"probes.f.sis_atualizacoes": "there are system updates",
|
| 1394 |
+
"probes.f.limite": "Limit",
|
| 1395 |
+
"probes.f.programa": "Which program?",
|
| 1396 |
+
"probes.f.programa_ph": "steam, firefox, obs",
|
| 1397 |
+
"probes.f.programa_dica": "The process name, as shown in the System Monitor.",
|
| 1398 |
+
"probes.f.evento": "Tell me when it…",
|
| 1399 |
+
"probes.f.prog_fechou": "closes (or crashes and disappears)",
|
| 1400 |
+
"probes.f.prog_abriu": "opens",
|
| 1401 |
+
"probes.f.prog_memoria": "uses too much memory",
|
| 1402 |
+
"probes.f.limite_mb": "More than",
|
| 1403 |
+
"probes.f.repo": "Project folder",
|
| 1404 |
+
"probes.f.hora": "Summary every day at",
|
| 1405 |
+
"probes.f.missao": "The mission",
|
| 1406 |
+
"probes.nova_palavras": "Gargantua turns it into a plan and you check it before creating. Needs Gargantua installed.",
|
| 1407 |
+
"probes.f.erro_pasta": "Pick a folder that exists.",
|
| 1408 |
+
"probes.f.erro_url": "Write the full address, starting with https://",
|
| 1409 |
+
"probes.f.erro_programa": "Write the program name.",
|
| 1410 |
+
"probes.f.erro_repo": "That folder is not a git project (no .git).",
|
| 1411 |
+
"probes.f.erro_hora": "Time as 18:00.",
|
| 1412 |
+
"probes.frase": "It will tell you when <b>{quando}</b>. Checks {check}, alerts at most {n} time(s) a day and only reads: it does not change, delete or send anything.",
|
| 1413 |
+
"probes.acoes_titulo": "If you want, it can also act on what it finds:",
|
| 1414 |
+
"probes.criar_e_ligar": "Create and turn on",
|
| 1415 |
+
"probes.criado_ligado": "\"{nome}\" created and on.",
|
| 1416 |
+
"probes.servico_ligado_agora": "Probes were off and are now on: the icon shows up next to the clock.",
|
| 1417 |
+
"probes.precisa_modelo": "This Probe uses Gargantua: download Gargantua Lite above so it can run.",
|
| 1418 |
+
"probes.seus": "YOUR PROBES",
|
| 1419 |
+
"probes.sem_ia": "fixed rule, no AI",
|
| 1420 |
+
"probes.com_ia": "Gargantua decides",
|
| 1421 |
+
"probes.ultima": "last check {quando}",
|
| 1422 |
+
"probes.pp.missao": "Tells you when {quando}.",
|
| 1423 |
+
"avisos.dica_sino": "Probe alerts: {n} new",
|
| 1424 |
+
"pu.ollama_antigo": "This model needs a newer Ollama. Update it with: curl -fsSL https://ollama.com/install.sh | sh (and try again).",
|
| 1425 |
+
"cooper.descontinuado": "Cooper was discontinued: Gargantua 2 already sees the screen. To install it: {comando}",
|
| 1426 |
+
"cfg.gargantua_novo": "You have Gargantua 1 or the Lite. Gargantua 2 is openTARS's main AI: 1.6 GB, more accurate, and it sees the screen more precisely (Gargantua 1 cannot see). Worth downloading.",
|
| 1427 |
+
"cfg.baixar_gargantua2": "Download Gargantua 2",
|
| 1428 |
+
"msg.busca_nao_lida": "The search was opened in the browser, but the AI did not read the page: what it answered above comes from its own memory and may be out of date. Check the results in the browser.",
|
| 1429 |
+
"msg.pouca_confianca": "I am not sure about this answer: it came from the model's memory and may be wrong or made up. Check a source before relying on it.",
|
| 1430 |
+
"msg.verificando_fato": "Low confidence in the answer above: checking it with a web search.",
|
| 1431 |
+
"msg.busca_nada_aberto": "Nothing was opened on your computer: the answer came from SearXNG. If it says it opened something in the browser, that did not happen.",
|
| 1432 |
+
"visao.ok": "{modelo} (looks at the screen: finds buttons and describes windows)",
|
| 1433 |
+
"visao.nao_instalado": "not installed. To let openTARS see the screen, download Gargantua 2: {comando}",
|
| 1434 |
+
"visao.desligado": "{modelo} is installed but turned off (TARS_COOPER=0).",
|
| 1435 |
+
"visao.sem_resposta": "The model that looks at the screen did not answer ({motivo}).",
|
| 1436 |
+
"cfg.nav.modelos": "More models",
|
| 1437 |
+
"cfg.modelos.titulo": "More models",
|
| 1438 |
+
"cfg.modelos.sub": "Models you can add with one click. They download through Ollama, show up in the model list when they finish, and openTARS can use them like any other model.",
|
| 1439 |
+
"pu.garg.nome_modelinhos": "Photo models (remove background, upscale, select and remove)",
|
| 1440 |
+
"modelinhos.baixando": "Downloading the photo models (~300 MB): remove the background, upscale, select by clicking and remove an object.",
|
| 1441 |
+
"modelinhos.pronto": "The photo models are ready.",
|
| 1442 |
+
"modelinhos.erro": "I couldn't download the photo models ({erro}). I'll try again next time openTARS opens.",
|
| 1443 |
+
"lite.baixando": "Downloading Gargantua 2 Lite (0.6 GB), the AI that runs in the background for the assistant, text actions and Probes.",
|
| 1444 |
+
"lite.pronto": "Gargantua 2 Lite is ready.",
|
| 1445 |
+
"lite.erro": "I couldn't download Gargantua 2 Lite ({erro}). I'll try again next time openTARS opens.",
|
| 1446 |
+
"cfg.bonsai.sub": "Makes images from a sentence (\"draw a lighthouse at dusk\"). By PrismML, Apache 2.0. Optional: {tamanho} and an NVIDIA card with 6 GB (or a Mac with Apple Silicon). Works offline once installed.",
|
| 1447 |
+
"cfg.bonsai.instalar": "Install ({tamanho})",
|
| 1448 |
+
"cfg.bonsai.remover": "Remove",
|
| 1449 |
+
"cfg.bonsai.nota": "Installs into an openTARS folder, no administrator password. Before generating, openTARS takes the other models off the card.",
|
| 1450 |
+
"cfg.bonsai.pronto": "Installed. Ask in the chat: \"draw a fox in the snow\".",
|
| 1451 |
+
"cfg.bonsai.instalando": "Installing (takes about 10 minutes)… {linha}",
|
| 1452 |
+
"cfg.bonsai.erro": "The installation failed ({erro}). The downloaded files stay; trying again continues where it stopped.",
|
| 1453 |
+
"cfg.bonsai.nao_da.placa": "Needs an NVIDIA card with at least 6 GB.",
|
| 1454 |
+
"cfg.bonsai.nao_da.apple_silicon": "Needs a Mac with Apple Silicon.",
|
| 1455 |
+
"cfg.bonsai.nao_da.disco": "There is not enough free disk space.",
|
| 1456 |
+
"cfg.bonsai.nao_da.falta": "The program {programa} is missing on this computer.",
|
| 1457 |
+
"cfg.modelos.g.opentars": "openTARS models",
|
| 1458 |
+
"cfg.modelos.g.opentars_sub": "Trained by us to use the computer with openTARS's tools.",
|
| 1459 |
+
"cfg.modelos.destaque": "Recommended",
|
| 1460 |
+
"cfg.modelos.bom_pra_ca": "Good for this computer",
|
| 1461 |
+
"cfg.modelos.pesado": "Heavy for this computer: it will be slow or may not fit.",
|
| 1462 |
+
"cfg.modelos.maquina": "This computer: graphics card {placa}, memory {ram}. The ones marked as good for it are the biggest of each kind that fit well.",
|
| 1463 |
+
"cfg.modelos.sem_placa": "none dedicated (processor only)",
|
| 1464 |
+
"cfg.modelos.destaque_nota": "The one that runs in the background: the assistant, text actions and Probes. Light, runs on the processor alone.",
|
| 1465 |
+
"cfg.modelos.g.bonsai": "Bonsai 2",
|
| 1466 |
+
"cfg.modelos.g.bonsai_sub": "Prism ML's ternary models: small files with vision, tools and thinking, and a 256K context. They need a recent Ollama (0.40.6 or newer).",
|
| 1467 |
+
"cfg.modelos.g.imagem": "Image generation",
|
| 1468 |
+
"cfg.modelos.g.imagem_sub": "Models that draw a picture from a text. openTARS makes images with Bonsai Image 4B (the first one, optional): just ask in the chat. The Ollama ones below generate images on macOS; for Windows and Linux its announcement said \"coming soon\", so they may download here and still not run. They are big.",
|
| 1469 |
+
"cfg.modelos.baixar": "Download · {tamanho}",
|
| 1470 |
+
"cfg.modelos.instalado": "Installed ✓",
|
| 1471 |
+
"cfg.modelos.cancelar": "Cancel",
|
| 1472 |
+
"cfg.modelos.baixando": "{pct}% · {feito} of {total} · {resto}",
|
| 1473 |
+
"cfg.modelos.cancelado": "Download canceled. Click again to resume where it stopped.",
|
| 1474 |
+
"cfg.modelos.sem_espaco": "Not enough free disk space: it needs about {precisa} and {livre} is free.",
|
| 1475 |
+
"cfg.modelos.cap.vision": "vision",
|
| 1476 |
+
"cfg.modelos.cap.tools": "tools",
|
| 1477 |
+
"cfg.modelos.cap.thinking": "thinking",
|
| 1478 |
+
"cfg.modelos.cap.image": "image generation",
|
| 1479 |
+
"cfg.modelos.cap.text": "text",
|
| 1480 |
+
"cfg.modelos.g.geral": "General use",
|
| 1481 |
+
"cfg.modelos.g.geral_sub": "Chat, reasoning and tools. Smaller ones run on almost any computer; the 14B and larger want a big graphics card or lots of memory.",
|
| 1482 |
+
"cfg.modelos.g.visao": "Vision",
|
| 1483 |
+
"cfg.modelos.g.visao_sub": "Models that also understand pictures you attach to a message.",
|
| 1484 |
+
"cfg.modelos.g.codigo": "Code",
|
| 1485 |
+
"cfg.modelos.g.codigo_sub": "Models tuned for writing and fixing code.",
|
| 1486 |
+
"cfg.modelos.g.grandes": "Large models",
|
| 1487 |
+
"cfg.modelos.g.grandes_sub": "These need a big graphics card or a lot of memory: they download fine, but on a smaller computer they will be slow or won't load.",
|
| 1488 |
+
"cfg.nav.gerenciar": "Manage models",
|
| 1489 |
+
"cfg.gerenciar.titulo": "Manage models",
|
| 1490 |
+
"cfg.gerenciar.sub": "What is installed in Ollama on this computer. Delete models you don't use to free space, or update one to its latest version.",
|
| 1491 |
+
"cfg.gerenciar.instalados": "Installed models",
|
| 1492 |
+
"cfg.gerenciar.resumo": "{n} models · {usado} on disk · {livre} free",
|
| 1493 |
+
"cfg.gerenciar.vazio": "No models installed yet. Add some in More models.",
|
| 1494 |
+
"cfg.gerenciar.selo.oficial": "official openTARS model",
|
| 1495 |
+
"cfg.gerenciar.selo.nuvem": "cloud model",
|
| 1496 |
+
"cfg.gerenciar.atualizar": "Update",
|
| 1497 |
+
"cfg.gerenciar.apagar": "Delete",
|
| 1498 |
+
"cfg.gerenciar.confirmar": "Yes, delete",
|
| 1499 |
+
"cfg.gerenciar.manter": "Keep it",
|
| 1500 |
+
"cfg.gerenciar.pergunta": "Delete {nome}? It frees {tamanho}. You can download it again later.",
|
| 1501 |
+
"cfg.gerenciar.pergunta_oficial": "This is an official openTARS model: the assistant uses it for actions. Delete {nome} anyway? It frees {tamanho}; you can download it again later.",
|
| 1502 |
+
"cfg.gerenciar.erro": "Couldn't delete: {erro}",
|
| 1503 |
+
"cfg.gerenciar.atualizando": "Checking for a newer version…",
|
| 1504 |
+
"cfg.gerenciar.atualizado": "Updated.",
|
| 1505 |
+
"cfg.gerenciar.em_dia": "Already up to date.",
|
| 1506 |
+
"modelo.novo": "A new version of {nomes} is on ollama.com. Ollama does not update models by itself.",
|
| 1507 |
+
"prova.sem_modelo": "No Gargantua installed. Use --model NAME to pick the model for the test.",
|
| 1508 |
+
"prova.inicio": "openTARS portable test: {n} tasks with {modelo} on {sistema}. It runs in a temporary folder; your home folder is not touched.",
|
| 1509 |
+
"prova.tarefa": "[{marca}] {i}/{n} {id} ({s}s){motivo}",
|
| 1510 |
+
"diag.plataforma": "Platform",
|
| 1511 |
+
"diag.plataforma_falta": "not available on this system yet: {funcoes}",
|
| 1512 |
+
"acoes.fechar": "Close",
|
| 1513 |
+
"acoes.aba.reescrever": "Rewrite",
|
| 1514 |
+
"acoes.aba.resumir": "Summarize",
|
| 1515 |
+
"acoes.aba.traduzir": "Translate",
|
| 1516 |
+
"acoes.aba.perguntar": "Ask",
|
| 1517 |
+
"acoes.opcao.corrigir": "Fix",
|
| 1518 |
+
"acoes.opcao.formal": "More formal",
|
| 1519 |
+
"acoes.opcao.informal": "Simpler",
|
| 1520 |
+
"acoes.opcao.para_en": "To English",
|
| 1521 |
+
"acoes.opcao.para_pt": "To Portuguese",
|
| 1522 |
+
"acoes.resultado.reescrever": "Rewritten text",
|
| 1523 |
+
"acoes.resultado.resumir": "Summary",
|
| 1524 |
+
"acoes.resultado.traduzir": "Translation",
|
| 1525 |
+
"acoes.resultado.perguntar": "Answer",
|
| 1526 |
+
"acoes.pergunta_dica": "Ask something about the selection",
|
| 1527 |
+
"acoes.enviar_pergunta": "Send question",
|
| 1528 |
+
"acoes.substituir": "Replace in the text",
|
| 1529 |
+
"acoes.copiar": "Copy",
|
| 1530 |
+
"acoes.copiado": "Copied",
|
| 1531 |
+
"acoes.descartar": "Discard",
|
| 1532 |
+
"acoes.rodape": "Nothing leaves your computer. The selected text is only material: openTARS never runs anything written in it. Shortcut: {atalho}",
|
| 1533 |
+
"acoes.atalho_linux": "Ctrl+Alt+R",
|
| 1534 |
+
"acoes.atalho_windows": "Ctrl+Alt+R",
|
| 1535 |
+
"acoes.atalho_macos": "Ctrl+Option+R",
|
| 1536 |
+
"acoes.trecho": "Selected text: \"{trecho}\"",
|
| 1537 |
+
"acoes.cortado": "(only the first {n} characters are used)",
|
| 1538 |
+
"acoes.sem_texto": "No text selected. Select something in any app and press the shortcut again.",
|
| 1539 |
+
"acoes.pensando": "Thinking…",
|
| 1540 |
+
"acoes.modelo": "{modelo} · on this computer",
|
| 1541 |
+
"acoes.erro": "That didn't work: {erro}",
|
| 1542 |
+
"acoes.vazio": "The model returned nothing. Try another option.",
|
| 1543 |
+
"atalho.acoes_registrado": "Text actions shortcut: {atalho} opens the panel with the selected text.",
|
| 1544 |
+
"atalho.acoes_como": "The text actions shortcut is not set up. To set it up ({atalho}): opentars --atalho-acoes on. Another combination: opentars --atalho-acoes ctrl+alt+g",
|
| 1545 |
+
"cfg.nav.assistente": "Assistant",
|
| 1546 |
+
"cfg.assist.titulo": "Assistant",
|
| 1547 |
+
"cfg.assist.sub": "AI at hand in any app: select some text, press the shortcut and choose what to do.",
|
| 1548 |
+
"cfg.assist.ligado_titulo": "Assistant on",
|
| 1549 |
+
"cfg.assist.ligado": "Keep the text actions model ready when I use it",
|
| 1550 |
+
"cfg.assist.ligado_nota": "When on, {modelo} runs the text actions and unloads by itself 3 minutes after the last use: when idle, the AI takes no memory or graphics card. When off, it unloads right away.",
|
| 1551 |
+
"cfg.assist.atalho_titulo": "Global shortcut",
|
| 1552 |
+
"cfg.assist.atalho_sub": "Opens the text actions panel with whatever is selected in any app.",
|
| 1553 |
+
"cfg.assist.atalho_nenhum": "The text actions shortcut is not set up.",
|
| 1554 |
+
"cfg.assist.atalho_cadastrar": "Set up {atalho}",
|
| 1555 |
+
"cfg.assist.atalho_remover": "Remove the shortcut",
|
| 1556 |
+
"cfg.assist.atalho_nota": "If the shortcut clashes with another app, pick another in the terminal: opentars --atalho-acoes ctrl+alt+g (or another combination).",
|
| 1557 |
+
"cfg.assist.sistema_titulo": "Start with the system",
|
| 1558 |
+
"cfg.assist.sistema": "Open openTARS hidden when I log in",
|
| 1559 |
+
"cfg.assist.sistema_nota": "On by default: the shortcut answers right away from the start of the day and the icon stays near the clock. Untick it to keep openTARS from starting with the system.",
|
| 1560 |
+
"cfg.assist.acoes_titulo": "Text actions",
|
| 1561 |
+
"cfg.assist.acoes_sub": "Rewrite, summarize, translate and ask about the selection. The selected text is only material: nothing written in it is run, and nothing leaves your computer.",
|
| 1562 |
+
"cfg.assist.acoes_modelo": "Text actions model: {modelo}.",
|
| 1563 |
+
"cfg.assist.erro": "That didn't work: {erro}",
|
| 1564 |
+
"rot.tray_acoes": "Text actions on the selection",
|
| 1565 |
+
"rot.tray_assistente": "Assistant on",
|
| 1566 |
+
"atalho.acoes_windows": "On Windows, {atalho} opens the text actions while openTARS is open (the icon near the clock). To have it from the start of the day, turn on Start with the system.",
|
| 1567 |
+
"atalho.acoes_macos": "On macOS, {atalho} opens the text actions while openTARS is open (the icon in the menu bar). To have it from the start of the day, turn on Start with the system.",
|
| 1568 |
+
"desinst.dados": "Also delete your openTARS chats, settings, memory and logs ({pastas})?",
|
| 1569 |
+
"desinst.dados_ok": "Chats, settings and logs deleted.",
|
| 1570 |
+
"desinst.modelos": "Also delete the openTARS models in Ollama ({nomes})? Your other Ollama models stay.",
|
| 1571 |
+
"desinst.deb": "To remove the program (installed from the .deb), run in a terminal: sudo apt remove opentars",
|
| 1572 |
+
"desinst.windows": "The remover opened in its own window and finishes by itself after this openTARS closes.",
|
| 1573 |
+
"pu.passo.sistema": "Permissions and shortcut",
|
| 1574 |
+
"pu.sist.mac.titulo": "Let openTARS see and act on this Mac",
|
| 1575 |
+
"pu.sist.mac.texto": "macOS asks for your permission for each thing. You grant it in System Settings and can take it back any time. None of this sends data off your Mac.",
|
| 1576 |
+
"pu.sist.acessibilidade": "Accessibility",
|
| 1577 |
+
"pu.sist.acessibilidade_desc": "Lets it click, type, paste and read the selected text in other apps for you.",
|
| 1578 |
+
"pu.sist.tela": "Screen Recording",
|
| 1579 |
+
"pu.sist.tela_desc": "Lets the assistant see the screen when you ask it to find a button or ask about what is on it.",
|
| 1580 |
+
"pu.sist.abrir_ajustes": "Open Settings",
|
| 1581 |
+
"pu.sist.concedida": "Granted",
|
| 1582 |
+
"pu.sist.mac.nota": "After granting, come back here: the list updates by itself. macOS may ask to reopen openTARS once. The Control+Option+R shortcut needs no permission, and macOS asks for the microphone when you turn the voice on. Without a permission, only the feature that needs it stays off.",
|
| 1583 |
+
"pu.sist.win.titulo": "openTARS always at hand",
|
| 1584 |
+
"pu.sist.win.texto": "Windows has no permissions to grant. Two choices and one note.",
|
| 1585 |
+
"pu.sist.atalho": "Shortcut for the text actions: Ctrl+Alt+R",
|
| 1586 |
+
"pu.sist.atalho_desc": "Select text in any app and press the shortcut. It works while openTARS is open (or in the icon near the clock).",
|
| 1587 |
+
"pu.sist.inicio": "Start with Windows",
|
| 1588 |
+
"pu.sist.inicio_desc": "Keeps openTARS in the icon near the clock from the start of the day. On by default; turn it off here or from the icon any time.",
|
| 1589 |
+
"pu.sist.admin": "A Windows limit",
|
| 1590 |
+
"pu.sist.admin_desc": "openTARS cannot control apps opened as administrator (some installers, for example). For those, it tells you and you do that step by hand.",
|
| 1591 |
+
"pu.sist.ligar": "Turn on",
|
| 1592 |
+
"pu.sist.ligado": "On",
|
| 1593 |
+
"pu.sist.desligado": "Off",
|
| 1594 |
+
"rapido.cap.tarefa": "Do a task on the computer",
|
| 1595 |
+
"rapido.cap.tarefa_desc": "Open, organize, fill in. I do it, you approve what matters.",
|
| 1596 |
+
"rapido.cap.tela": "Ask about the screen",
|
| 1597 |
+
"rapido.cap.tela_desc": "\"What is this error?\" \"Where do I click to export?\"",
|
| 1598 |
+
"rapido.cap.arquivo": "Find a file",
|
| 1599 |
+
"rapido.cap.arquivo_desc": "\"The 2024 rental agreement.\" Looks at the name and the text inside.",
|
| 1600 |
+
"rot.tray_foto": "Edit a photo…",
|
| 1601 |
+
"rapido.cap.foto": "Edit a photo",
|
| 1602 |
+
"rapido.cap.foto_desc": "Crop, brighten, remove the background, upscale or remove an object. Always on a copy.",
|
| 1603 |
+
"foto.escolher": "Choose the photos to edit",
|
| 1604 |
+
"foto.filtro": "Photos ({ext})",
|
| 1605 |
+
"rapido.cap.web": "Search the web",
|
| 1606 |
+
"rapido.cap.web_desc": "News, prices, schedules: what changes over time.",
|
| 1607 |
+
"rapido.cap.lembrete": "Create a reminder",
|
| 1608 |
+
"rapido.cap.lembrete_desc": "\"Every Friday at 5 pm remind me to send the report.\"",
|
| 1609 |
+
"rapido.pref.tela": "Look at my screen: ",
|
| 1610 |
+
"rapido.pref.web": "Search the web: ",
|
| 1611 |
+
"rapido.pref.lembrete": "Remind me to ",
|
| 1612 |
+
"busca.dica": "Which file are you looking for? E.g.: the 2024 rental agreement",
|
| 1613 |
+
"busca.procurando": "Looking in your folders…",
|
| 1614 |
+
"busca.nada": "I found no file with these words in the name or in the text.",
|
| 1615 |
+
"busca.achados": "{n} result(s): I looked at the name and at the text inside the documents.",
|
| 1616 |
+
"busca.abrir": "Open",
|
| 1617 |
+
"busca.pasta": "Show in folder",
|
| 1618 |
+
"busca.sem_texto": "image only, could not read the text",
|
| 1619 |
+
"busca.nota": "The search runs on this computer and only reads: it moves and deletes nothing.",
|
| 1620 |
+
"arq.titulo": "{n} file(s) selected",
|
| 1621 |
+
"arq.acao.resumir": "Summarize",
|
| 1622 |
+
"arq.acao.renomear": "Rename by content",
|
| 1623 |
+
"arq.acao.mover": "Move to a folder",
|
| 1624 |
+
"arq.acao.lixeira": "Move to trash",
|
| 1625 |
+
"arq.previa.renomear": "How it would look (nothing changed yet)",
|
| 1626 |
+
"arq.previa.resumir": "A summary of each file",
|
| 1627 |
+
"arq.previa.mover": "These files go to the folder you choose",
|
| 1628 |
+
"arq.previa.lixeira": "These files go to the trash",
|
| 1629 |
+
"arq.pensando": "Reading the files…",
|
| 1630 |
+
"arq.novo_nome": "New name for {nome}",
|
| 1631 |
+
"arq.renomear_n": "Rename {n}",
|
| 1632 |
+
"arq.resumir": "Summarize",
|
| 1633 |
+
"arq.escolher_pasta": "Choose the folder…",
|
| 1634 |
+
"arq.lixeira_n": "Yes, move {n} to the trash",
|
| 1635 |
+
"arq.aviso_renomear": "I only read the text of the files to suggest the names. Check and edit them before applying.",
|
| 1636 |
+
"arq.aviso_resumir": "I summarize the first {n} files that have text.",
|
| 1637 |
+
"arq.aviso_mover": "Nothing is overwritten: a file with the same name in the chosen folder is left out.",
|
| 1638 |
+
"arq.aviso_lixeira": "They go to the trash, not deleted for good: you can get them back.",
|
| 1639 |
+
"arq.sem_texto": "No text I can read (a PDF that is only an image, for example): the name stays as it is.",
|
| 1640 |
+
"arq.feito_renomear": "{n} renamed.",
|
| 1641 |
+
"arq.feito_mover": "{n} moved to {pasta}.",
|
| 1642 |
+
"arq.pulados": "{n} left out (a file with the same name was already there).",
|
| 1643 |
+
"arq.feito_lixeira": "{n} moved to the trash.",
|
| 1644 |
+
"arq.desfazer": "Undo",
|
| 1645 |
+
"arq.desfeito": "Undone: the files are back as they were.",
|
| 1646 |
+
"arq.cancelar": "Close",
|
| 1647 |
+
"arq.rodape": "Nothing changes without your click. Renaming and moving can be undone while this panel is open.",
|
| 1648 |
+
"ctx.titulo": "openTARS suggestion",
|
| 1649 |
+
"ctx.email": "You are writing an email. Want me to check the spelling before you send it? Select the text and click Check.",
|
| 1650 |
+
"ctx.revisar": "Check",
|
| 1651 |
+
"ctx.agora_nao": "Not now",
|
| 1652 |
+
"ctx.parar": "Stop suggesting in this app",
|
| 1653 |
+
"ctx.nota": "I only look at the name of the app in use and the window title. Nothing is recorded or sent. Turn it off in Settings > Assistant.",
|
| 1654 |
+
"ctx.selecione": "Select the text you want to check and click Check again (or use the text actions shortcut).",
|
| 1655 |
+
"cfg.assist.ctx_titulo": "Suggestions based on the app in use",
|
| 1656 |
+
"cfg.assist.ctx": "Suggest help based on the app in use (for example, checking an email)",
|
| 1657 |
+
"ctx.nota_config": "On by default. Every 4 seconds openTARS looks only at the name of the app and the title of the window in use, records and sends nothing, and suggests once per window.",
|
| 1658 |
+
"arq.acao.foto": "Edit the photo",
|
| 1659 |
+
"arq.titulo_fotos": "{n} photo(s) selected",
|
| 1660 |
+
"arq.previa.foto": "How it would look (the original does not change)",
|
| 1661 |
+
"arq.sem_modelo": "no model: instant",
|
| 1662 |
+
"arq.neste_computador": "on this computer",
|
| 1663 |
+
"foto.dica": "What to do with the photo? E.g.: crop it square and make it brighter",
|
| 1664 |
+
"foto.sufixo": "edited",
|
| 1665 |
+
"foto.chip.quadrado": "Square",
|
| 1666 |
+
"foto.chip.clara": "Brighter",
|
| 1667 |
+
"foto.chip.girar": "Rotate",
|
| 1668 |
+
"foto.chip.cinza": "Black and white",
|
| 1669 |
+
"foto.chip.email": "Shrink for email",
|
| 1670 |
+
"foto.frase.quadrado": "square",
|
| 1671 |
+
"foto.frase.clara": "brighter",
|
| 1672 |
+
"foto.frase.girar": "rotate",
|
| 1673 |
+
"foto.frase.cinza": "black and white",
|
| 1674 |
+
"foto.frase.email": "shrink for email",
|
| 1675 |
+
"foto.chip.sem_fundo": "Remove background",
|
| 1676 |
+
"foto.chip.aumentar": "Upscale",
|
| 1677 |
+
"foto.chip.remover": "Remove an object",
|
| 1678 |
+
"foto.frase.sem_fundo": "remove the background",
|
| 1679 |
+
"foto.frase.aumentar": "increase resolution",
|
| 1680 |
+
"foto.clique_no_objeto": "Click the object to remove, in the photo on the left.",
|
| 1681 |
+
"foto.chat_feito": "Done: {o_que}. The original is unchanged; the copy is next to it: {nomes}.",
|
| 1682 |
+
"foto.chat_erro": "I couldn't edit it: {erros}",
|
| 1683 |
+
"imagem.nao_instalado": "To make images I use Bonsai Image 4B, which is optional (about 9.5 GB, and an NVIDIA card with 6 GB or a Mac with Apple Silicon). Install it in Settings > More models > Bonsai Image 4B and ask me again.",
|
| 1684 |
+
"imagem.gerando": "Generating the image: {o_que} (the first image takes about a minute while the model loads; the next ones, seconds)",
|
| 1685 |
+
"imagem.pronta": "Done. I saved it in {pasta}: {arquivo}.",
|
| 1686 |
+
"imagem.sem_memoria": "The graphics card has only {livre} MB free and Bonsai needs about 5 GB. Close games or programs that use the card and ask me again.",
|
| 1687 |
+
"imagem.erro": "I couldn't make the image ({erro}).",
|
| 1688 |
+
"foto.modelinhos_faltando": "The photo models are still downloading. Try again in a few minutes.",
|
| 1689 |
+
"foto.antes": "Before · {w} x {h}",
|
| 1690 |
+
"foto.depois": "After · {w} x {h}",
|
| 1691 |
+
"foto.entendi": "Got it: {o_que}.",
|
| 1692 |
+
"foto.o_que_fazer": "Write what to do and press Enter, or use one of the shortcuts above.",
|
| 1693 |
+
"foto.nao_entendi": "I did not understand what to do. You can ask for: square, 16:9, brighter or darker, contrast, rotate, mirror, black and white, shrink, and save as png, jpg or webp.",
|
| 1694 |
+
"foto.nao_abre": "I could not open this image.",
|
| 1695 |
+
"foto.salvar": "Save a copy: {nome}",
|
| 1696 |
+
"foto.salvar_n": "Save {n} copies",
|
| 1697 |
+
"foto.aviso": "Always a copy in the same folder: the original stays as it is. The copy leaves out the location and device data. Cropping, rotating and brightening are instant; removing the background, upscaling and removing an object use small models on this computer and take a few seconds.",
|
| 1698 |
+
"foto.salvas": "Copy saved: {nomes}."
|
| 1699 |
+
}
|
app/idiomas/pt_BR.json
ADDED
|
@@ -0,0 +1,1767 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_nome": "Português (Brasil)",
|
| 3 |
+
"_rotulo": "PT-BR",
|
| 4 |
+
"_locale": [
|
| 5 |
+
"pt_BR",
|
| 6 |
+
"pt"
|
| 7 |
+
],
|
| 8 |
+
"_ia": "IDIOMA: responda sempre em português do Brasil, de forma natural e curta. Se o usuário escrever em outro idioma, responda no idioma dele.",
|
| 9 |
+
"cmd.sair_principal": "sair",
|
| 10 |
+
"cmd.sair": [
|
| 11 |
+
"sair",
|
| 12 |
+
"/sair"
|
| 13 |
+
],
|
| 14 |
+
"cmd.sim": [
|
| 15 |
+
"s",
|
| 16 |
+
"sim"
|
| 17 |
+
],
|
| 18 |
+
"cmd.modelos": [
|
| 19 |
+
"/modelo",
|
| 20 |
+
"/modelos",
|
| 21 |
+
"modelos",
|
| 22 |
+
"mostrar modelos",
|
| 23 |
+
"listar modelos"
|
| 24 |
+
],
|
| 25 |
+
"cmd.modelo": [
|
| 26 |
+
"/modelo"
|
| 27 |
+
],
|
| 28 |
+
"cmd.encerrar": [
|
| 29 |
+
"/encerrar",
|
| 30 |
+
"/encerrar todas",
|
| 31 |
+
"/encerrar todas llms",
|
| 32 |
+
"/encerrar todas as ias",
|
| 33 |
+
"/encerrar todos os modelos",
|
| 34 |
+
"encerrar todas llms",
|
| 35 |
+
"encerrar todas as llms",
|
| 36 |
+
"encerrar todas as ias",
|
| 37 |
+
"encerrar todos os modelos",
|
| 38 |
+
"descarregar todas as ias",
|
| 39 |
+
"descarregar todos os modelos",
|
| 40 |
+
"descarregar todas as llms",
|
| 41 |
+
"parar todas as ias",
|
| 42 |
+
"parar todos os modelos",
|
| 43 |
+
"parar todas as llms"
|
| 44 |
+
],
|
| 45 |
+
"cmd.limpar": [
|
| 46 |
+
"/limpar",
|
| 47 |
+
"limpar conversa",
|
| 48 |
+
"esquecer conversa",
|
| 49 |
+
"esqueça a conversa"
|
| 50 |
+
],
|
| 51 |
+
"cmd.idioma": [
|
| 52 |
+
"/idioma"
|
| 53 |
+
],
|
| 54 |
+
"cmd.auto": [
|
| 55 |
+
"/modelo auto",
|
| 56 |
+
"modo automático",
|
| 57 |
+
"modo auto",
|
| 58 |
+
"volte para automático",
|
| 59 |
+
"volte para o automático",
|
| 60 |
+
"volte pro automático"
|
| 61 |
+
],
|
| 62 |
+
"cmd.auto_argumento": [
|
| 63 |
+
"auto",
|
| 64 |
+
"automático"
|
| 65 |
+
],
|
| 66 |
+
"detectar.visao": [
|
| 67 |
+
"veja minha tela",
|
| 68 |
+
"olhe minha tela",
|
| 69 |
+
"analise minha tela",
|
| 70 |
+
"o que está na tela",
|
| 71 |
+
"clique",
|
| 72 |
+
"clique em",
|
| 73 |
+
"pressione",
|
| 74 |
+
"digite na tela",
|
| 75 |
+
"interface",
|
| 76 |
+
"janela",
|
| 77 |
+
"botão",
|
| 78 |
+
"teclado",
|
| 79 |
+
"ícone",
|
| 80 |
+
"cursor",
|
| 81 |
+
"arrasta",
|
| 82 |
+
"arraste",
|
| 83 |
+
"arrastar",
|
| 84 |
+
"no canto da tela",
|
| 85 |
+
"na tela",
|
| 86 |
+
"clica",
|
| 87 |
+
"clicar",
|
| 88 |
+
"aperta o botão",
|
| 89 |
+
"aperte o botão"
|
| 90 |
+
],
|
| 91 |
+
"detectar.tecnico": [
|
| 92 |
+
"erro",
|
| 93 |
+
"linha de comando",
|
| 94 |
+
"instalar",
|
| 95 |
+
"driver de vídeo",
|
| 96 |
+
"instale",
|
| 97 |
+
"instala"
|
| 98 |
+
],
|
| 99 |
+
"detectar.fechar": [
|
| 100 |
+
"feche",
|
| 101 |
+
"fecha",
|
| 102 |
+
"fechar",
|
| 103 |
+
"abas",
|
| 104 |
+
"aba do",
|
| 105 |
+
"aba de"
|
| 106 |
+
],
|
| 107 |
+
"detectar.sites": [
|
| 108 |
+
"site",
|
| 109 |
+
"abra o site",
|
| 110 |
+
"abra a página"
|
| 111 |
+
],
|
| 112 |
+
"detectar.busca": [
|
| 113 |
+
"pesquisar",
|
| 114 |
+
"pesquise",
|
| 115 |
+
"pesquisa",
|
| 116 |
+
"buscar",
|
| 117 |
+
"busque",
|
| 118 |
+
"busca",
|
| 119 |
+
"procurar",
|
| 120 |
+
"procure",
|
| 121 |
+
"procura",
|
| 122 |
+
"procura pra mim",
|
| 123 |
+
"acha pra mim",
|
| 124 |
+
"notícias",
|
| 125 |
+
"preço",
|
| 126 |
+
"quanto custa",
|
| 127 |
+
"quanto está",
|
| 128 |
+
"cotação",
|
| 129 |
+
"tutorial",
|
| 130 |
+
"vídeos de",
|
| 131 |
+
"vídeo de",
|
| 132 |
+
"previsão do tempo",
|
| 133 |
+
"quando estreia",
|
| 134 |
+
"quando lança",
|
| 135 |
+
"quando sai"
|
| 136 |
+
],
|
| 137 |
+
"detectar.acao": [
|
| 138 |
+
"comando",
|
| 139 |
+
"arquivo",
|
| 140 |
+
"arquivos",
|
| 141 |
+
"pasta"
|
| 142 |
+
],
|
| 143 |
+
"busca.verbos": [
|
| 144 |
+
"pesquisar",
|
| 145 |
+
"pesquise",
|
| 146 |
+
"pesquisa",
|
| 147 |
+
"buscar",
|
| 148 |
+
"busque",
|
| 149 |
+
"busca",
|
| 150 |
+
"procurar",
|
| 151 |
+
"procure",
|
| 152 |
+
"procura"
|
| 153 |
+
],
|
| 154 |
+
"busca.conectores": [
|
| 155 |
+
"sobre",
|
| 156 |
+
"por",
|
| 157 |
+
"de",
|
| 158 |
+
"a respeito de",
|
| 159 |
+
"referente a"
|
| 160 |
+
],
|
| 161 |
+
"busca.preposicoes": [
|
| 162 |
+
"no",
|
| 163 |
+
"na",
|
| 164 |
+
"do",
|
| 165 |
+
"da",
|
| 166 |
+
"de"
|
| 167 |
+
],
|
| 168 |
+
"palavras.navegador": [
|
| 169 |
+
"navegador",
|
| 170 |
+
"navegador de internet"
|
| 171 |
+
],
|
| 172 |
+
"modelo.ignorar": [
|
| 173 |
+
"o",
|
| 174 |
+
"a",
|
| 175 |
+
"os",
|
| 176 |
+
"as",
|
| 177 |
+
"de",
|
| 178 |
+
"do",
|
| 179 |
+
"da",
|
| 180 |
+
"dos",
|
| 181 |
+
"das",
|
| 182 |
+
"pra",
|
| 183 |
+
"para",
|
| 184 |
+
"por",
|
| 185 |
+
"favor",
|
| 186 |
+
"modelo",
|
| 187 |
+
"ia",
|
| 188 |
+
"llm",
|
| 189 |
+
"no",
|
| 190 |
+
"na",
|
| 191 |
+
"use",
|
| 192 |
+
"usar",
|
| 193 |
+
"usa",
|
| 194 |
+
"quero",
|
| 195 |
+
"troca",
|
| 196 |
+
"trocar",
|
| 197 |
+
"troque",
|
| 198 |
+
"mude",
|
| 199 |
+
"mudar",
|
| 200 |
+
"carregue",
|
| 201 |
+
"carregar",
|
| 202 |
+
"selecione",
|
| 203 |
+
"selecionar"
|
| 204 |
+
],
|
| 205 |
+
"modelo.menor": [
|
| 206 |
+
"o menor",
|
| 207 |
+
"a menor",
|
| 208 |
+
"o mais leve",
|
| 209 |
+
"mais leve",
|
| 210 |
+
"o mais rápido",
|
| 211 |
+
"mais rápido",
|
| 212 |
+
"o padrão"
|
| 213 |
+
],
|
| 214 |
+
"modelo.maior": [
|
| 215 |
+
"o maior",
|
| 216 |
+
"a maior",
|
| 217 |
+
"o mais forte",
|
| 218 |
+
"mais forte",
|
| 219 |
+
"o mais poderoso",
|
| 220 |
+
"mais poderoso",
|
| 221 |
+
"o mais inteligente",
|
| 222 |
+
"mais inteligente"
|
| 223 |
+
],
|
| 224 |
+
"modelo.visao": [
|
| 225 |
+
"o de visão",
|
| 226 |
+
"modelo de visão",
|
| 227 |
+
"o que enxerga"
|
| 228 |
+
],
|
| 229 |
+
"modelo.tecnico": [
|
| 230 |
+
"o técnico",
|
| 231 |
+
"o de programação",
|
| 232 |
+
"o de código"
|
| 233 |
+
],
|
| 234 |
+
"avaliacao": [
|
| 235 |
+
[
|
| 236 |
+
"descreve o que aparece no meu monitor agora",
|
| 237 |
+
"visao"
|
| 238 |
+
],
|
| 239 |
+
[
|
| 240 |
+
"aperta aquele ícone vermelho no canto de cima",
|
| 241 |
+
"visao"
|
| 242 |
+
],
|
| 243 |
+
[
|
| 244 |
+
"lê pra mim o que está escrito naquela caixa de aviso",
|
| 245 |
+
"visao"
|
| 246 |
+
],
|
| 247 |
+
[
|
| 248 |
+
"qual aba do navegador está aberta agora",
|
| 249 |
+
"visao"
|
| 250 |
+
],
|
| 251 |
+
[
|
| 252 |
+
"arrasta esse arquivo pra lixeira com o cursor",
|
| 253 |
+
"visao"
|
| 254 |
+
],
|
| 255 |
+
[
|
| 256 |
+
"por que meu programa em c dá segmentation fault",
|
| 257 |
+
"codigo"
|
| 258 |
+
],
|
| 259 |
+
[
|
| 260 |
+
"como faço um laço que percorre uma lista em java",
|
| 261 |
+
"codigo"
|
| 262 |
+
],
|
| 263 |
+
[
|
| 264 |
+
"escreve um script que renomeia fotos pela data",
|
| 265 |
+
"codigo"
|
| 266 |
+
],
|
| 267 |
+
[
|
| 268 |
+
"o apt está travado dizendo que outro processo usa o lock",
|
| 269 |
+
"tecnico"
|
| 270 |
+
],
|
| 271 |
+
[
|
| 272 |
+
"qual a diferença entre ext4 e btrfs",
|
| 273 |
+
"tecnico"
|
| 274 |
+
],
|
| 275 |
+
[
|
| 276 |
+
"como compacto uma pasta em tar.gz pela linha de comando",
|
| 277 |
+
"tecnico"
|
| 278 |
+
],
|
| 279 |
+
[
|
| 280 |
+
"minha placa de vídeo não aparece no nvidia-smi",
|
| 281 |
+
"tecnico"
|
| 282 |
+
],
|
| 283 |
+
[
|
| 284 |
+
"desliga o bluetooth pra mim",
|
| 285 |
+
"acao"
|
| 286 |
+
],
|
| 287 |
+
[
|
| 288 |
+
"aumenta o volume do som um pouco",
|
| 289 |
+
"acao"
|
| 290 |
+
],
|
| 291 |
+
[
|
| 292 |
+
"move os prints da área de trabalho pra pasta imagens",
|
| 293 |
+
"acao"
|
| 294 |
+
],
|
| 295 |
+
[
|
| 296 |
+
"fecha o spotify e depois abre o discord",
|
| 297 |
+
"acao"
|
| 298 |
+
],
|
| 299 |
+
[
|
| 300 |
+
"renomeia o arquivo relatorio.txt para final.txt",
|
| 301 |
+
"acao"
|
| 302 |
+
],
|
| 303 |
+
[
|
| 304 |
+
"liga o modo escuro do sistema",
|
| 305 |
+
"acao"
|
| 306 |
+
],
|
| 307 |
+
[
|
| 308 |
+
"qual o preço da rtx 5060 hoje nas lojas",
|
| 309 |
+
"busca"
|
| 310 |
+
],
|
| 311 |
+
[
|
| 312 |
+
"acha um tutorial de como trocar a pasta térmica",
|
| 313 |
+
"busca"
|
| 314 |
+
],
|
| 315 |
+
[
|
| 316 |
+
"quero ver vídeos de receita de lasanha",
|
| 317 |
+
"busca"
|
| 318 |
+
],
|
| 319 |
+
[
|
| 320 |
+
"descobre quando estreia o próximo filme da marvel",
|
| 321 |
+
"busca"
|
| 322 |
+
],
|
| 323 |
+
[
|
| 324 |
+
"mostra notícias de hoje sobre inteligência artificial",
|
| 325 |
+
"busca"
|
| 326 |
+
],
|
| 327 |
+
[
|
| 328 |
+
"valeu, muito obrigado mesmo",
|
| 329 |
+
"simples"
|
| 330 |
+
],
|
| 331 |
+
[
|
| 332 |
+
"boa noite, tudo certo por aí?",
|
| 333 |
+
"simples"
|
| 334 |
+
],
|
| 335 |
+
[
|
| 336 |
+
"entra no gmail pra mim",
|
| 337 |
+
"simples"
|
| 338 |
+
],
|
| 339 |
+
[
|
| 340 |
+
"bom dia, openTARS",
|
| 341 |
+
"simples"
|
| 342 |
+
],
|
| 343 |
+
[
|
| 344 |
+
"e aí, como você está hoje?",
|
| 345 |
+
"simples"
|
| 346 |
+
],
|
| 347 |
+
[
|
| 348 |
+
"me explica como funciona um buraco negro",
|
| 349 |
+
"geral"
|
| 350 |
+
],
|
| 351 |
+
[
|
| 352 |
+
"escreve um poema curto sobre o mar",
|
| 353 |
+
"geral"
|
| 354 |
+
],
|
| 355 |
+
[
|
| 356 |
+
"me dá ideias de nome pra um cachorro",
|
| 357 |
+
"geral"
|
| 358 |
+
],
|
| 359 |
+
[
|
| 360 |
+
"resume a segunda guerra mundial em poucas linhas",
|
| 361 |
+
"geral"
|
| 362 |
+
],
|
| 363 |
+
[
|
| 364 |
+
"qual a diferença entre vírus e bactéria",
|
| 365 |
+
"geral"
|
| 366 |
+
],
|
| 367 |
+
[
|
| 368 |
+
"me ajuda a planejar uma viagem de três dias para gramado",
|
| 369 |
+
"geral"
|
| 370 |
+
],
|
| 371 |
+
[
|
| 372 |
+
"traduz para o inglês: eu gosto de café",
|
| 373 |
+
"geral"
|
| 374 |
+
]
|
| 375 |
+
],
|
| 376 |
+
"gui.automatico": "Automático",
|
| 377 |
+
"gui.ia": "IA",
|
| 378 |
+
"gui.nova_conversa": "Nova conversa",
|
| 379 |
+
"gui.conectando": "conectando",
|
| 380 |
+
"gui.ollama_ok": "Ollama conectado",
|
| 381 |
+
"gui.ollama_offline": "Ollama offline",
|
| 382 |
+
"gui.teclas": "Enter envia · ↑ repete · Esc para",
|
| 383 |
+
"gui.dica_entrada": "Peça algo ao openTARS…",
|
| 384 |
+
"gui.enviar": "Enviar",
|
| 385 |
+
"gui.parar": "Parar",
|
| 386 |
+
"gui.parando": "Parando…",
|
| 387 |
+
"gui.voce": "Você",
|
| 388 |
+
"gui.pensando": "pensando",
|
| 389 |
+
"gui.boas_vindas": "O que eu faço por você?",
|
| 390 |
+
"gui.boas_vindas_sub": "Peça do seu jeito. Eu abro programas, clico, pesquiso e olho a tela — tudo aqui no seu PC.",
|
| 391 |
+
"gui.exemplos": [
|
| 392 |
+
"Abra a calculadora e faça 12 × 8 pelos botões",
|
| 393 |
+
"Quais janelas estão abertas agora?",
|
| 394 |
+
"Procure vídeos de receita de lasanha no YouTube",
|
| 395 |
+
"Quanto de memória e disco estou usando?"
|
| 396 |
+
],
|
| 397 |
+
"gui.conversa_carregada": "Conversa anterior carregada ({n} pedido(s)). “Nova conversa” começa do zero.",
|
| 398 |
+
"gui.atalho_dica": "Dica: {atalho} abre a barra rápida de qualquer lugar.",
|
| 399 |
+
"gui.n_modelos": "{n} modelo(s) de conversa",
|
| 400 |
+
"gui.sem_gpu": "sem GPU",
|
| 401 |
+
"gui.trabalhando": "trabalhando",
|
| 402 |
+
"gui.modo_auto": "Modo automático: o openTARS escolhe a IA pra cada pedido.",
|
| 403 |
+
"gui.modelo_fixado": "{modelo} fixado pra todos os pedidos.",
|
| 404 |
+
"gui.tarefa": "tarefa {tarefa}",
|
| 405 |
+
"gui.escolhido_por_voce": "escolhido por você",
|
| 406 |
+
"gui.carregando": "carregando {modelo}…",
|
| 407 |
+
"gui.pronto_em": "{modelo} pronto ({segundos}s)",
|
| 408 |
+
"gui.respondeu_em": "respondeu em {segundos}s",
|
| 409 |
+
"gui.erro_modelos": "Não consegui ler os modelos: {erro}",
|
| 410 |
+
"rapido.dica": "Pergunte ou peça algo…",
|
| 411 |
+
"rapido.ajuda": "Enter envia · Esc fecha · Ctrl+Enter abre a janela",
|
| 412 |
+
"rapido.ocupado": "O openTARS está ocupado com outro pedido. Tente de novo em instantes.",
|
| 413 |
+
"rapido.abrir_janela": "abrir janela",
|
| 414 |
+
"perigo.titulo": "COMANDO POTENCIALMENTE PERIGOSO",
|
| 415 |
+
"perigo.explicacao": "Pode apagar dados ou afetar o sistema de forma irreversível.",
|
| 416 |
+
"perigo.pergunta": "Executar mesmo assim? (s/N)",
|
| 417 |
+
"perigo.titulo_janela": "openTARS — comando perigoso",
|
| 418 |
+
"perigo.dialogo": "A IA quer executar um comando que pode apagar dados ou afetar o sistema de forma irreversível:\n\n{comando}\n\nExecutar mesmo assim?",
|
| 419 |
+
"ferramenta.open_application": "abrindo app",
|
| 420 |
+
"ferramenta.close_application": "fechando app",
|
| 421 |
+
"ferramenta.open_website": "abrindo site",
|
| 422 |
+
"ferramenta.search_web": "pesquisando",
|
| 423 |
+
"ferramenta.click_element": "clicando em",
|
| 424 |
+
"ferramenta.list_elements": "lendo a janela",
|
| 425 |
+
"ferramenta.type_in_element": "preenchendo campo",
|
| 426 |
+
"ferramenta.execute_terminal": "rodando comando",
|
| 427 |
+
"ferramenta.click_mouse": "clicando",
|
| 428 |
+
"ferramenta.drag_mouse": "arrastando",
|
| 429 |
+
"ferramenta.scroll_mouse": "rolando",
|
| 430 |
+
"ferramenta.type_text": "digitando",
|
| 431 |
+
"ferramenta.press_key": "apertando tecla",
|
| 432 |
+
"ferramenta.take_screenshot": "olhando a tela",
|
| 433 |
+
"ferramenta.list_windows": "vendo as janelas abertas",
|
| 434 |
+
"ferramenta.focus_window": "trazendo janela pra frente",
|
| 435 |
+
"tarefa.visao": "visão",
|
| 436 |
+
"tarefa.tecnico": "técnica",
|
| 437 |
+
"tarefa.acao": "ação",
|
| 438 |
+
"tarefa.busca": "busca",
|
| 439 |
+
"tarefa.simples": "simples",
|
| 440 |
+
"tarefa.geral": "geral",
|
| 441 |
+
"categoria.visao": "visão, tela e interfaces gráficas",
|
| 442 |
+
"categoria.simples": "tarefas simples e respostas rápidas",
|
| 443 |
+
"categoria.geral": "conversa geral e raciocínio",
|
| 444 |
+
"encaixe.gpu": "cabe na GPU",
|
| 445 |
+
"encaixe.misto": "GPU + CPU",
|
| 446 |
+
"encaixe.cpu": "majoritariamente CPU, bem mais lento",
|
| 447 |
+
"lista.gpu": "GPU {fabricante} detectada: {total}GB de VRAM ({livre}GB livres agora)",
|
| 448 |
+
"lista.sem_gpu": "GPU dedicada não detectada — os modelos vão rodar na CPU.",
|
| 449 |
+
"lista.nenhum_modelo": "Nenhum modelo encontrado no Ollama (ele pode estar offline, ou nenhum modelo foi baixado ainda — use 'ollama pull <modelo>').",
|
| 450 |
+
"lista.capacidades": "capacidades",
|
| 451 |
+
"lista.embeddings": "{n} modelo(s) de embedding instalado(s) não aparecem aqui — servem só para gerar vetores, não para conversar, então não entram na escolha de IA.",
|
| 452 |
+
"aviso.ollama_offline": "O Ollama não está respondendo em {host}. Abra o Ollama (no Linux: sudo systemctl start ollama; no Windows e no macOS: o app Ollama) ou confira a variável OLLAMA_HOST. Sem ele, o openTARS não tem IA pra responder.",
|
| 453 |
+
"aviso.sem_display": "nenhuma sessão gráfica encontrada (variável DISPLAY vazia)",
|
| 454 |
+
"aviso.sem_mouse": "Controle de mouse/teclado desligado: {motivo}. Conversa, abrir apps/sites e comandos de terminal continuam funcionando.",
|
| 455 |
+
"aviso.wayland": "Sessão Wayland: abrir apps/sites, comandos, prints e cliques pelo nome do botão funcionam, mas cliques e digitação por coordenada só chegam a alguns aplicativos. Para controle total, na tela de login clique na engrenagem e escolha a sessão com \"Xorg\".",
|
| 456 |
+
"aviso.sem_modelo_conversa": "Nenhum modelo de conversa ainda. Baixe um, por exemplo: ollama pull qwen3:8b",
|
| 457 |
+
"msg.log_desativado": "aviso: log de auditoria desativado ({erro}).",
|
| 458 |
+
"msg.falhou": "falhou",
|
| 459 |
+
"msg.tarefa_auto": "tarefa detectada: {tarefa} → modelo: {modelo}",
|
| 460 |
+
"msg.tarefa_manual": "modelo fixado: {modelo}",
|
| 461 |
+
"msg.carregando_fundo": "carregando {modelo} em segundo plano...",
|
| 462 |
+
"msg.carregando_titulo": "Carregando IA: {modelo}",
|
| 463 |
+
"msg.carregando_demora": "Isso pode demorar no primeiro uso.",
|
| 464 |
+
"msg.carregado": "{modelo} carregado em {segundos}s",
|
| 465 |
+
"msg.descarregando": "descarregando {modelo}...",
|
| 466 |
+
"msg.pensando": "pensando",
|
| 467 |
+
"msg.tempo_total": "{modelo} — tempo total: {segundos}s",
|
| 468 |
+
"msg.analisando": "{modelo} está analisando o resultado da ferramenta...",
|
| 469 |
+
"msg.ollama_sem_contato": "não consegui falar com o Ollama para checar os modelos em execução (ele pode estar offline).",
|
| 470 |
+
"msg.nenhuma_ia_carregada": "nenhuma IA carregada no momento.",
|
| 471 |
+
"msg.encerrando_modelos": "encerrando {n} modelo(s): {modelos}...",
|
| 472 |
+
"msg.ollama_perdido": "perdi contato com o Ollama durante a checagem de confirmação.",
|
| 473 |
+
"msg.ainda_ativo": "ainda ativo: {modelos} — tentando de novo ({tentativa}/{total})...",
|
| 474 |
+
"msg.encerramento_nao_confirmado": "AVISO: não consegui confirmar o encerramento de: {modelos}.",
|
| 475 |
+
"msg.ias_descarregadas": "todas as IAs foram descarregadas da memória (confirmado).",
|
| 476 |
+
"msg.erro_carregar_http": "ERRO do Ollama ({codigo}) ao carregar {modelo}: {detalhe}",
|
| 477 |
+
"msg.erro_carregar": "Não foi possível carregar {modelo}: {erro}",
|
| 478 |
+
"msg.historico_apagado": "Histórico de conversa apagado.",
|
| 479 |
+
"msg.modo_auto_ativado": "Modo AUTO ativado.",
|
| 480 |
+
"msg.modelo_manual": "Modelo manual selecionado: {modelo}",
|
| 481 |
+
"msg.modelo_sem_ferramentas": "{modelo} não suporta ferramentas — vai responder só em texto, sem conseguir abrir apps, sites, executar comandos etc.",
|
| 482 |
+
"msg.modelo_nao_encontrado": "Não encontrei nenhum modelo instalado parecido com \"{pedido}\". Instalados: {instalados}",
|
| 483 |
+
"msg.modelo_nao_instalado": "(não parece estar instalado no Ollama ainda — o carregamento pode falhar; rode 'ollama pull {modelo}')",
|
| 484 |
+
"msg.historico_ilegivel": "não consegui ler o histórico em {arquivo} ({erro}) — começando do zero.",
|
| 485 |
+
"msg.historico_nao_salvo": "não consegui salvar o histórico da conversa: {erro}",
|
| 486 |
+
"msg.erro_ollama": "Erro do Ollama: {detalhe}",
|
| 487 |
+
"msg.erro_ollama_http": "Erro do Ollama ({codigo}): {detalhe}",
|
| 488 |
+
"msg.erro_comunicar_ollama": "Erro ao comunicar com o Ollama: {erro}",
|
| 489 |
+
"msg.ollama_recusou": "O Ollama recusou a conversa mesmo sem 'think'/'tools'.",
|
| 490 |
+
"msg.erro_streaming": "Erro durante o streaming: {erro}",
|
| 491 |
+
"msg.limite_contexto": "a IA bateu no limite de contexto ({tokens} tokens) e foi cortada. Se acontecer sempre, aumente com a variável TARS_CONTEXTO.",
|
| 492 |
+
"msg.falha_carregar_alternativa": "falha ao carregar {modelo}, tentando alternativa...",
|
| 493 |
+
"msg.nenhum_modelo_carregou": "Não consegui carregar nenhum modelo disponível para essa tarefa (tentei: {tentados}).",
|
| 494 |
+
"msg.imagem_sem_ferramentas": "falha ao analisar a imagem com ferramentas ({erro}); tentando só com texto...",
|
| 495 |
+
"msg.ia_parou": "a IA parou sem responder; pedindo pra continuar a tarefa...",
|
| 496 |
+
"msg.ia_recusou": "a IA disse que não consegue; lembrando que ela tem ferramentas pra isso...",
|
| 497 |
+
"msg.sem_texto": "{modelo} não retornou nenhum texto nesta resposta.",
|
| 498 |
+
"msg.limite_etapas": "A IA usou {n} etapas sem concluir (parou de fazer progresso ou chegou no teto). Peça para continuar, ou divida a tarefa em partes menores.",
|
| 499 |
+
"msg.interrompido": "interrompido.",
|
| 500 |
+
"msg.erro_inesperado": "erro inesperado: {erro}",
|
| 501 |
+
"term.ias_disponiveis": "IAs disponíveis:",
|
| 502 |
+
"term.modo_atual": "Modo atual: {modo}",
|
| 503 |
+
"term.modelo_fixado": "Modelo fixado: {modelo}",
|
| 504 |
+
"term.modo_auto_explica": "o openTARS escolhe sozinho a IA mais adequada pra cada tarefa.",
|
| 505 |
+
"term.voce": "Você",
|
| 506 |
+
"term.conversa_carregada": "conversa anterior: {n} pedido(s) · /limpar começa do zero",
|
| 507 |
+
"term.ajuda": "openTARS {versao} · assistente de IA local para Linux\n\nConversa\n opentars abre a conversa no terminal (continua a última)\n opentars --new começa uma conversa nova\n opentars --resume escolhe uma conversa salva para continuar\n opentars --plan modo plano: a IA só descreve o que faria\n opentars --auto edições nesta pasta sem perguntar (apagar, enviar e instalar ainda perguntam)\n opentars --chat \"pedido\" responde um pedido e sai\n opentars -p \"pedido\" para scripts: só a resposta (ou --output-format json); lê o stdin\n opentars-gui abre a janela\n opentars-gui --rapido abre a barra rápida (ctrl+alt+espaço)\n\nModelos\n opentars --model <nome> usa este modelo no -p\n opentars --explicar \"pedido\" mostra como a tarefa e o modelo são escolhidos\n opentars --avaliar-classificador mede o acerto da Murph e do modo automático\n\nAmbiente\n opentars --diagnostico confere Ollama, tela e acessibilidade (não muda nada)\n opentars --autoteste diagnóstico + um teste real com a calculadora\n opentars --setup instala o que estiver faltando (Ollama, modelos...)\n\nPreferências\n opentars --idioma <código> troca o idioma (pt_BR ou en)\n opentars --atalho [teclas|off] mostra, troca ou remove o atalho global\n opentars --version mostra a versão\n\nDentro da conversa, /ajuda lista os comandos. Um AGENTS.md na pasta entra em toda conversa.",
|
| 508 |
+
"idioma.lista_titulo": "Idiomas disponíveis:",
|
| 509 |
+
"idioma.como_trocar": "Troque com: /idioma <código> (ex: /idioma en)",
|
| 510 |
+
"idioma.trocado": "Idioma: {nome}",
|
| 511 |
+
"idioma.nao_encontrado": "Idioma \"{pedido}\" não encontrado. Disponíveis: {lista}",
|
| 512 |
+
"avaliacao.titulo": "Avaliando a classificação dos pedidos com {n} frases...",
|
| 513 |
+
"avaliacao.com_palavras": "Todas as camadas (modo AUTO): {acertos}/{n} ({pct}%) <- o que o openTARS usa",
|
| 514 |
+
"avaliacao.erros_local": "Erros do classificador local sozinho (frase | esperado | respondeu):",
|
| 515 |
+
"avaliacao.erros_total": "Erros do modo AUTO (frase | esperado | escolheu (camadas)):",
|
| 516 |
+
"diag.titulo": "diagnóstico",
|
| 517 |
+
"diag.titulo_sistema": "Sistema",
|
| 518 |
+
"diag.titulo_ia": "IA",
|
| 519 |
+
"diag.titulo_controle": "Controle do computador",
|
| 520 |
+
"diag.idioma": "Idioma",
|
| 521 |
+
"diag.sistema": "Sistema",
|
| 522 |
+
"diag.sessao": "Sessão",
|
| 523 |
+
"diag.ollama_ok": "versão {versao} em {host}",
|
| 524 |
+
"diag.modelos": "Modelos de conversa",
|
| 525 |
+
"diag.ajudante": "Helper",
|
| 526 |
+
"diag.livres": "livres",
|
| 527 |
+
"diag.escolha_auto": "Escolha automática (tarefa {tarefa})",
|
| 528 |
+
"diag.mouse": "Mouse e teclado",
|
| 529 |
+
"diag.janelas": "Lista de janelas",
|
| 530 |
+
"diag.janelas_sem_x": "sem acesso (precisa de X11 ou XWayland)",
|
| 531 |
+
"diag.janelas_ok": "{n} janela(s) aberta(s)",
|
| 532 |
+
"diag.print": "Print da tela",
|
| 533 |
+
"diag.print_preto": "a imagem saiu toda preta (no Wayland, instale um capturador: sudo apt install gnome-screenshot)",
|
| 534 |
+
"diag.acessibilidade": "Clique pelo nome (acessibilidade)",
|
| 535 |
+
"diag.acessiveis": "{n} janela(s) acessível(is): {apps}",
|
| 536 |
+
"diag.nenhuma_acessivel": "nenhuma janela acessível agora (abra um app e rode de novo; apps Qt/KDE passam a aparecer na primeira vez que o openTARS usar a acessibilidade)",
|
| 537 |
+
"diag.clipboard": "Área de transferência (texto com acento)",
|
| 538 |
+
"diag.clipboard_falta": "sem xclip/xsel/wl-copy: sudo apt install xclip",
|
| 539 |
+
"diag.interface": "Interface gráfica",
|
| 540 |
+
"diag.atalho": "Atalho global",
|
| 541 |
+
"diag.resumo": "{falhas} falha(s), {avisos} aviso(s).",
|
| 542 |
+
"auto.titulo": "autoteste",
|
| 543 |
+
"auto.titulo_classificador": "Escolha automática de modelo",
|
| 544 |
+
"auto.classificador": "Acerto na classificação",
|
| 545 |
+
"auto.classificando": "classificando {n} frases...",
|
| 546 |
+
"auto.classificador_resultado": "{acertos}/{n} ({pct}%) no modo AUTO; Murph sozinha {murph}/{n}; {ms} ms por frase",
|
| 547 |
+
"auto.titulo_calculadora": "Teste real: calculadora",
|
| 548 |
+
"auto.calculadora_teste": "Calculadora 7 + 2",
|
| 549 |
+
"auto.calculadora": "calculadora",
|
| 550 |
+
"auto.pedido_calculadora": "Abra a calculadora e faça 7 + 2 clicando nos botões dela. Depois me diga o resultado.",
|
| 551 |
+
"auto.nao_mexa": "Vou abrir a calculadora e clicar sozinho. Não mexa no mouse nem no teclado por alguns segundos...",
|
| 552 |
+
"auto.sem_calculadora": "nenhuma calculadora instalada ({nome}); teste pulado",
|
| 553 |
+
"auto.sem_ia": "sem Ollama ou sem modelo de conversa: não dá pra testar",
|
| 554 |
+
"auto.passou": "passou (o visor mostra 9)",
|
| 555 |
+
"auto.visor_ok_resposta_nao": "o visor mostra 9, mas a resposta da IA não disse o resultado",
|
| 556 |
+
"auto.sem_janela_acessivel": "a calculadora não expõe os botões pela acessibilidade",
|
| 557 |
+
"auto.falhou": "não chegou no 9 (visor: {visor})",
|
| 558 |
+
"auto.calculadora_detalhe": "{segundos} s · {ferramentas}",
|
| 559 |
+
"auto.resposta_ia": "Resposta da IA",
|
| 560 |
+
"auto.relatorio_salvo": "Relatório salvo em {arquivo} — mande esse arquivo se precisar de ajuda.",
|
| 561 |
+
"atalho.tecla_espaco": "Espaço",
|
| 562 |
+
"atalho.registrado": "Atalho global: {atalho} abre a barra rápida ({ambiente}).",
|
| 563 |
+
"atalho.nao_registrado": "O atalho global ainda não está configurado.",
|
| 564 |
+
"atalho.como_registrar": "Configure com: opentars --atalho ctrl+alt+space (ou outra combinação). Remova com: opentars --atalho off",
|
| 565 |
+
"atalho.conflito": "a combinação já é usada por: {acao}. Escolha outra, ex: opentars --atalho ctrl+alt+t",
|
| 566 |
+
"atalho.falhou": "não deu pra salvar o atalho nas configurações do sistema",
|
| 567 |
+
"atalho.invalido": "combinação inválida. Exemplos: ctrl+alt+space, super+t",
|
| 568 |
+
"atalho.manual": "No {ambiente}, cadastre o atalho à mão (Configurações > Teclado > Atalhos) com o comando: {comando}",
|
| 569 |
+
"atalho.removido": "Atalho global removido.",
|
| 570 |
+
"atalho.sem_espaco": "não há vaga livre para atalhos personalizados",
|
| 571 |
+
"atalho.sem_suporte": "este ambiente não deixa cadastrar o atalho automaticamente",
|
| 572 |
+
"setup.titulo": "=== Configurando o openTARS ===",
|
| 573 |
+
"setup.aviso": "AVISO",
|
| 574 |
+
"setup.ollama_ja": "Ollama já está instalado — pulando.",
|
| 575 |
+
"setup.ollama_existente": "Já existe um Ollama respondendo em {url} (Docker/outro instalador) — usando ele.",
|
| 576 |
+
"setup.ollama_instalando": "Ollama não encontrado. Instalando (via ollama.com/install.sh)...",
|
| 577 |
+
"setup.ollama_ok": "Ollama instalado com sucesso.",
|
| 578 |
+
"setup.ollama_falhou": "não foi possível instalar o Ollama automaticamente (sem internet?).",
|
| 579 |
+
"setup.ollama_manual": "Instale em https://ollama.com/download e depois rode: opentars --setup",
|
| 580 |
+
"setup.venv_sem_tk": "Ambiente Python sem tkinter, mas '{python}' tem — recriando.",
|
| 581 |
+
"setup.venv_ja": "Ambiente Python já existe — pulando criação.",
|
| 582 |
+
"setup.venv_quebrado": "Ambiente Python antigo quebrado — recriando.",
|
| 583 |
+
"setup.venv_criando": "Criando ambiente Python isolado ({versao})...",
|
| 584 |
+
"setup.pip_falhou": "não deu pra atualizar pip/setuptools (seguindo mesmo assim).",
|
| 585 |
+
"setup.venv_ok": "Ambiente Python criado.",
|
| 586 |
+
"setup.venv_falhou": "não deu pra criar o ambiente Python. Verifique o pacote 'python3-venv'.",
|
| 587 |
+
"setup.deps_verificando": "Verificando dependências Python...",
|
| 588 |
+
"setup.deps_ok": "Todas as dependências Python já estão instaladas — pulando.",
|
| 589 |
+
"setup.deps_instalando": "Instalando dependências Python: {pacotes}",
|
| 590 |
+
"setup.deps_falhou": "não deu pra instalar tudo agora (sem internet?). Rode depois: opentars --setup",
|
| 591 |
+
"setup.tk_ok": "Interface gráfica disponível (tkinter OK).",
|
| 592 |
+
"setup.tk_falta": "tkinter não encontrado — a interface gráfica (opentars-gui) não vai abrir.",
|
| 593 |
+
"setup.tk_instale": "Instale com: sudo apt install python3-tk",
|
| 594 |
+
"setup.tk_terminal": "O modo terminal (opentars) funciona normalmente.",
|
| 595 |
+
"setup.sem_venv": "sem ambiente Python isolado, pulando dependências Python.",
|
| 596 |
+
"setup.ollama_nao_respondeu": "o Ollama não respondeu em {url}.",
|
| 597 |
+
"setup.baixado": "'{modelo}' baixado com sucesso.",
|
| 598 |
+
"setup.nao_baixou": "não deu pra baixar '{modelo}' agora. Rode depois: ollama pull {modelo}",
|
| 599 |
+
"setup.ja_tem_modelos": "Você já tem {n} modelo(s) de conversa — pulando.",
|
| 600 |
+
"setup.sem_modelo_pedido": "nenhum modelo de conversa (TARS_SEM_MODELO=1). Baixe um depois: ollama pull qwen3:8b",
|
| 601 |
+
"setup.baixando_conversa": "Baixando o modelo de conversa '{modelo}' (escolhido pelo seu hardware: {vram} GB de VRAM, {ram} GB de RAM).",
|
| 602 |
+
"setup.pode_demorar": "Isso pode levar alguns minutos, dependendo da internet...",
|
| 603 |
+
"setup.sem_ollama_modelo": "sem Ollama, não deu pra baixar um modelo de conversa. Depois de iniciar o Ollama: opentars --setup",
|
| 604 |
+
"setup.pronto": "=== openTARS pronto! Abra pelo menu de aplicativos ou digite 'opentars' no terminal. ===",
|
| 605 |
+
"setup.dica_atalho": "Dica: depois de abrir o openTARS uma vez, Ctrl+Alt+Espaço abre a barra rápida de qualquer lugar.",
|
| 606 |
+
"desktop.generico": "Assistente de IA local",
|
| 607 |
+
"desktop.comentario": "Assistente de IA 100% local que controla o seu desktop — roda com Ollama",
|
| 608 |
+
"desktop.barra_rapida": "Barra rápida",
|
| 609 |
+
"desktop.palavras": "IA;assistente;ollama;tars;automação;",
|
| 610 |
+
"setup.acess_ok": "Clique pelo nome dos botões disponível (acessibilidade OK).",
|
| 611 |
+
"setup.acess_falta": "biblioteca de acessibilidade não encontrada — o clique pelo nome fica desligado (a IA usa print + coordenadas).",
|
| 612 |
+
"setup.acess_instale": "Instale com: sudo apt install python3-gi gir1.2-atspi-2.0 at-spi2-core",
|
| 613 |
+
"detectar.abrir": [
|
| 614 |
+
"abra",
|
| 615 |
+
"abre",
|
| 616 |
+
"abrir",
|
| 617 |
+
"inicie",
|
| 618 |
+
"inicia",
|
| 619 |
+
"iniciar",
|
| 620 |
+
"execute",
|
| 621 |
+
"executar",
|
| 622 |
+
"rodar",
|
| 623 |
+
"rode"
|
| 624 |
+
],
|
| 625 |
+
"detectar.codigo": [
|
| 626 |
+
"código",
|
| 627 |
+
"programação",
|
| 628 |
+
"programar",
|
| 629 |
+
"compilar",
|
| 630 |
+
"função",
|
| 631 |
+
"variável",
|
| 632 |
+
"algoritmo",
|
| 633 |
+
"laço",
|
| 634 |
+
"loop",
|
| 635 |
+
"linguagem de programação"
|
| 636 |
+
],
|
| 637 |
+
"tarefa.codigo": "código",
|
| 638 |
+
"categoria.codigo": "programação e código",
|
| 639 |
+
"msg.trocando_modelo": "{modelo} recusou de novo; passando o pedido pro {novo}...",
|
| 640 |
+
"msg.memoria_sozinho": "Pedido para guardar na memória: salvei \"{fato}\" sozinho.",
|
| 641 |
+
"gui.copiar": "Copiar",
|
| 642 |
+
"gui.copiado": "Copiado",
|
| 643 |
+
"gui.codigo": "código",
|
| 644 |
+
"msg.imagem_citada": "Imagem citada no pedido: {nome} (anexada sozinha).",
|
| 645 |
+
"msg.descrevendo_tela": "Olhando a tela com {visao}...",
|
| 646 |
+
"msg.muitas_falhas": "{n} ferramentas falharam seguidas: a IA vai parar e explicar o que travou.",
|
| 647 |
+
"detectar.verbos": [
|
| 648 |
+
"faça",
|
| 649 |
+
"faz",
|
| 650 |
+
"fazer",
|
| 651 |
+
"digite",
|
| 652 |
+
"digita",
|
| 653 |
+
"escreva",
|
| 654 |
+
"escreve",
|
| 655 |
+
"envie",
|
| 656 |
+
"envia",
|
| 657 |
+
"mande",
|
| 658 |
+
"manda",
|
| 659 |
+
"clique",
|
| 660 |
+
"clica",
|
| 661 |
+
"crie",
|
| 662 |
+
"cria",
|
| 663 |
+
"apague",
|
| 664 |
+
"apaga",
|
| 665 |
+
"mova",
|
| 666 |
+
"move",
|
| 667 |
+
"copie",
|
| 668 |
+
"copia",
|
| 669 |
+
"cole",
|
| 670 |
+
"cola",
|
| 671 |
+
"salve",
|
| 672 |
+
"salva",
|
| 673 |
+
"toque",
|
| 674 |
+
"toca",
|
| 675 |
+
"coloque",
|
| 676 |
+
"coloca",
|
| 677 |
+
"pause",
|
| 678 |
+
"pausa",
|
| 679 |
+
"aumente",
|
| 680 |
+
"aumenta",
|
| 681 |
+
"diminua",
|
| 682 |
+
"diminui",
|
| 683 |
+
"desligue",
|
| 684 |
+
"desliga",
|
| 685 |
+
"ligue",
|
| 686 |
+
"liga",
|
| 687 |
+
"instale",
|
| 688 |
+
"instala",
|
| 689 |
+
"renomeie",
|
| 690 |
+
"renomeia",
|
| 691 |
+
"pergunte",
|
| 692 |
+
"pergunta",
|
| 693 |
+
"responda",
|
| 694 |
+
"responde",
|
| 695 |
+
"calcule",
|
| 696 |
+
"calcula",
|
| 697 |
+
"soma",
|
| 698 |
+
"multiplique",
|
| 699 |
+
"veja",
|
| 700 |
+
"olhe",
|
| 701 |
+
"leia",
|
| 702 |
+
"mostre",
|
| 703 |
+
"mostra",
|
| 704 |
+
"tire",
|
| 705 |
+
"tira",
|
| 706 |
+
"aperte",
|
| 707 |
+
"aperta",
|
| 708 |
+
"selecione",
|
| 709 |
+
"seleciona",
|
| 710 |
+
"minimize",
|
| 711 |
+
"maximize",
|
| 712 |
+
"feche",
|
| 713 |
+
"fecha",
|
| 714 |
+
"abra",
|
| 715 |
+
"abre",
|
| 716 |
+
"pesquise",
|
| 717 |
+
"pesquisa",
|
| 718 |
+
"procure",
|
| 719 |
+
"procura",
|
| 720 |
+
"busque",
|
| 721 |
+
"acesse",
|
| 722 |
+
"acessa",
|
| 723 |
+
"entra"
|
| 724 |
+
],
|
| 725 |
+
"msg.tentando_outro_modelo": "{modelo} não conseguiu; tentando com {novo}, sem repetir o que já falhou...",
|
| 726 |
+
"explicar.titulo": "Como o openTARS decide o pedido: \"{pedido}\"",
|
| 727 |
+
"explicar.camadas": "Camadas (na ordem em que olham o pedido):",
|
| 728 |
+
"explicar.votos": "Votos somados: {votos}",
|
| 729 |
+
"explicar.resultado": "Tarefa: {tarefa} (decidida por: {via})",
|
| 730 |
+
"explicar.multi": "Várias etapas: {partes} -> a IA pensa antes, recebe um lembrete e usa um modelo maior",
|
| 731 |
+
"explicar.fila": "Fila de modelos pra essa tarefa (o primeiro que carregar atende):",
|
| 732 |
+
"explicar.placar": "{acertos}/{total} deram certo nas últimas vezes",
|
| 733 |
+
"explicar.placar_ruim": "{acertos}/{total} deram certo -> foi pro fim da fila",
|
| 734 |
+
"explicar.sem_placar": "sem histórico ainda",
|
| 735 |
+
"explicar.pensar": "Raciocínio (think): {sim_nao} · ferramentas oferecidas: {n}",
|
| 736 |
+
"explicar.sim": "sim",
|
| 737 |
+
"explicar.nao": "não",
|
| 738 |
+
"explicar.uso": "Uso: opentars --explicar \"o seu pedido\"",
|
| 739 |
+
"msg.plano": "Plano:",
|
| 740 |
+
"msg.plano_incompleto": "A IA ia parar com {feitas} de {total} etapas feitas: mandando terminar o plano...",
|
| 741 |
+
"msg.conferindo_conclusao": "Conferindo se o pedido inteiro foi feito de verdade...",
|
| 742 |
+
"ferramenta.remember": "guardando na memória",
|
| 743 |
+
"ferramenta.forget": "esquecendo",
|
| 744 |
+
"aviso.wayland_ydotool": "(Ou instale o ydotool 1.0+ e ligue o serviço ydotoold: aí o mouse e o teclado funcionam em qualquer janela. Agora: {motivo})",
|
| 745 |
+
"diag.wayland_ydotool": "Wayland com ydotool: mouse e teclado em qualquer janela (experimental; deixe a aceleração do mouse desligada pra mais precisão)",
|
| 746 |
+
"perigo.sem_confirmacao_rotina": "Um pedido sem janela pediu um comando perigoso, mas não há ninguém pra confirmar no terminal: não rodei.",
|
| 747 |
+
"ferramenta.move_window": "movendo a janela",
|
| 748 |
+
"term.onde_conversar": "A conversa fica na janela: opentars-gui (ou a barra rápida, Ctrl+Alt+Espaço).",
|
| 749 |
+
"avaliacao.so_murph": "Só a Murph (ajudante local): {acertos}/{n} ({pct}%) · segura em {certos}/{n}, acertou {pct_certos}% desses",
|
| 750 |
+
"setup.helper_murph": "helper Murph {versao} já vem no pacote: decide o tipo de cada pedido sem baixar nenhum modelo ajudante.",
|
| 751 |
+
"diag.helper_murph": "Murph {versao}",
|
| 752 |
+
"diag.helper_sem_murph": "a helper Murph não foi encontrada (modelos/murph.json): reinstale o openTARS",
|
| 753 |
+
"gui.helper_murph": "helper Murph {versao}",
|
| 754 |
+
"gargantua.ok": "Gargantua {versao}, a IA oficial do openTARS ({modelo}): usado primeiro nas ações e buscas",
|
| 755 |
+
"gargantua.desligado": "{modelo} instalado, mas TARS_SEM_GARGANTUA=1: o AUTO não dá preferência pra ele",
|
| 756 |
+
"gargantua.nao_instalado": "Gargantua não instalado. Pra baixar a IA oficial do openTARS: ollama pull {modelo}",
|
| 757 |
+
"setup.gargantua_ja": "Gargantua, a IA oficial do openTARS, já está instalado ({modelo}).",
|
| 758 |
+
"setup.gargantua_baixando": "Baixando o Gargantua, a IA oficial do openTARS ({modelo}, ~1,6 GB)...",
|
| 759 |
+
"setup.gargantua_segundo_plano": "Sem terminal aqui para mostrar o andamento (instalação pela loja de aplicativos ou automática): o download do Gargantua (~1,6 GB) continua em segundo plano. O openTARS mostra o progresso quando você abrir.",
|
| 760 |
+
"setup.gargantua_pulado": "TARS_SEM_GARGANTUA=1: o Gargantua não foi baixado.",
|
| 761 |
+
"msg.folego": "tarefa longa: {etapas} etapas, {acoes} ações feitas; continuando",
|
| 762 |
+
"versao.nova": "Saiu o openTARS {versao}! Pra atualizar, rode de novo o comando de instalação (está no README do GitHub).",
|
| 763 |
+
"versao.em_dia": "em dia (confere 1x por dia no GitHub)",
|
| 764 |
+
"diag.versao": "Versão nova",
|
| 765 |
+
"term.onde_conversar_sem_interface": "Sem sessão gráfica aqui: converse pelo terminal com opentars --chat.",
|
| 766 |
+
"chat.titulo": "conversa no terminal",
|
| 767 |
+
"chat.dica": "/ajuda para os comandos · ctrl+c para a resposta · /sair encerra",
|
| 768 |
+
"chat.ctrl_c": "ctrl+c de novo (ou /sair) para sair",
|
| 769 |
+
"chat.ajuda": "Comandos\n /modelos lista as IAs instaladas\n /modelo <nome> fixa uma IA (ex.: /modelo gargantua, /modelo o menor)\n /modelo auto volta à escolha automática\n /retomar escolhe uma conversa salva para continuar\n /compactar resume o começo da conversa (libera contexto)\n /contexto mostra quanto do contexto está em uso\n /modo <modo> perguntar, plano (só descreve) ou automatico\n /desfazer volta as edições de arquivo do último pedido\n /init cria um AGENTS.md com as instruções do projeto\n !<comando> roda um comando no shell (a saída vai para o próximo pedido)\n /limpar começa uma conversa nova\n /idioma <código> troca o idioma (pt_BR ou en)\n /encerrar tira todas as IAs da memória\n /ajuda mostra esta lista\n /sair encerra\n\nAtalhos\n ctrl+c para a resposta (duas vezes seguidas: sai)\n ↑ ↓ pedidos anteriores\n ctrl+r busca nos pedidos anteriores",
|
| 770 |
+
"diag.ambiente": "ambiente",
|
| 771 |
+
"diag.modo_sem_interface": "sem sessão gráfica: modo terminal (opentars --chat). Mouse, teclado, tela e janelas não são usados aqui.",
|
| 772 |
+
"diag.wsl_ollama_windows": "Ollama rodando no Windows ({host})",
|
| 773 |
+
"diag.wsl_sem_ollama": "Nenhum Ollama alcançável a partir do WSL. Instale no WSL (curl -fsSL https://ollama.com/install.sh | sh) ou, se ele roda no Windows, defina OLLAMA_HOST=0.0.0.0 lá e reinicie.",
|
| 774 |
+
"aviso.modo_sem_interface": "Sem sessão gráfica: o openTARS funciona como assistente de terminal (conversa e comandos).",
|
| 775 |
+
"setup.wsl_detectado": "WSL detectado: o openTARS funciona aqui no modo terminal (opentars --chat), ou com janelas pelo WSLg.",
|
| 776 |
+
"setup.ollama_windows": "O Ollama está rodando no Windows, em {url} — usando ele. (No Windows, defina OLLAMA_HOST=0.0.0.0 para ele ser alcançável do WSL.)",
|
| 777 |
+
"setup.ollama_serve_manual": "Sem systemd aqui: inicie o Ollama em outro terminal com 'ollama serve' e rode 'opentars --setup' de novo.",
|
| 778 |
+
"diag.amb_desktop": "área de trabalho",
|
| 779 |
+
"diag.amb_wslg": "WSL{wsl} com WSLg (janelas Linux no Windows)",
|
| 780 |
+
"diag.amb_sem_tela": "sem sessão gráfica",
|
| 781 |
+
"diag.amb_wsl_sem_tela": "WSL{wsl}, sem sessão gráfica",
|
| 782 |
+
"diag.amb_ssh": "SSH, sem sessão gráfica",
|
| 783 |
+
"msg.cortando_raciocinio": "{modelo} está raciocinando sem ter sido pedido: refazendo sem o raciocínio (/no_think).",
|
| 784 |
+
"pu.janela": "openTARS: primeiros passos",
|
| 785 |
+
"pu.slogan": "Seu assistente que mexe no computador, sem sair dele.",
|
| 786 |
+
"pu.passo": "Passo {n} de {total}",
|
| 787 |
+
"pu.passo.idioma": "Idioma",
|
| 788 |
+
"pu.passo.ollama": "Ollama",
|
| 789 |
+
"pu.passo.nuvem": "Nuvem (opcional)",
|
| 790 |
+
"pu.passo.gargantua": "Baixar os modelos",
|
| 791 |
+
"pu.passo.teste": "Teste rápido",
|
| 792 |
+
"pu.voltar": "Voltar",
|
| 793 |
+
"pu.continuar": "Continuar",
|
| 794 |
+
"pu.pausar": "Pausar",
|
| 795 |
+
"pu.retomar": "Retomar",
|
| 796 |
+
"pu.tentar_de_novo": "Tentar de novo",
|
| 797 |
+
"pu.ollama.titulo": "Procurando o Ollama",
|
| 798 |
+
"pu.ollama.texto": "O Ollama é o programa que roda o modelo de IA no seu computador. O TARS precisa dele para funcionar.",
|
| 799 |
+
"pu.ollama.procurando": "Procurando o Ollama neste computador…",
|
| 800 |
+
"pu.ollama.ok": "Ollama encontrado neste computador (versão {versao})",
|
| 801 |
+
"pu.ollama.parado": "O Ollama está instalado, mas parado.",
|
| 802 |
+
"pu.ollama.faltando": "O Ollama ainda não está instalado.",
|
| 803 |
+
"pu.ollama.instalar": "Instalar o Ollama",
|
| 804 |
+
"pu.ollama.iniciar": "Iniciar o Ollama",
|
| 805 |
+
"pu.ollama.procurar_de_novo": "Procurar de novo",
|
| 806 |
+
"pu.ollama.instalando": "Instalando o Ollama. Uma janela do sistema pode pedir a sua senha.",
|
| 807 |
+
"pu.ollama.iniciando": "Iniciando o Ollama…",
|
| 808 |
+
"pu.ollama.erro_instalar": "Não consegui instalar: {motivo}",
|
| 809 |
+
"pu.ollama.abri_download": "Abri a página de download do Ollama no navegador. Instale, abra o Ollama e clique em Procurar de novo.",
|
| 810 |
+
"pu.ollama.erro_iniciar": "Não consegui iniciar: {motivo}",
|
| 811 |
+
"pu.nuvem.titulo": "Quer usar a nuvem também?",
|
| 812 |
+
"pu.nuvem.texto": "O TARS funciona 100% no seu computador. A nuvem é um extra, para pedidos que pedem um modelo maior. Você pode mudar isso depois, em Configurações.",
|
| 813 |
+
"pu.nuvem.nao": "Não, só no meu computador",
|
| 814 |
+
"pu.nuvem.nao_desc": "Nada sai daqui. É o jeito padrão.",
|
| 815 |
+
"pu.nuvem.sim": "Sim, configurar a nuvem",
|
| 816 |
+
"pu.nuvem.sim_desc": "Você usa a sua própria chave de um provedor, como o Ollama Cloud. O que você escrever ou falar sai do computador.",
|
| 817 |
+
"pu.nuvem.aviso_treino": "Planos gratuitos de alguns provedores podem usar o conteúdo para treino.",
|
| 818 |
+
"pu.chave.titulo": "Conecte o seu provedor",
|
| 819 |
+
"pu.chave.texto": "Escolha o provedor e cole a sua chave. Ela fica guardada só neste computador.",
|
| 820 |
+
"pu.chave.provedor": "Provedor",
|
| 821 |
+
"pu.chave.endereco": "Endereço",
|
| 822 |
+
"pu.chave.chave": "Chave",
|
| 823 |
+
"pu.chave.endereco_ph": "https://…",
|
| 824 |
+
"pu.chave.testar": "Testar conexão",
|
| 825 |
+
"pu.chave.testando": "Testando…",
|
| 826 |
+
"pu.chave.ok": "Conectou.",
|
| 827 |
+
"pu.chave.erro_chave": "O provedor recusou a chave.",
|
| 828 |
+
"pu.chave.erro_endereco": "Esse endereço não respondeu como esperado.",
|
| 829 |
+
"pu.chave.erro_rede": "Sem conexão com o provedor.",
|
| 830 |
+
"pu.chave.erro_limite": "O limite gratuito acabou por agora.",
|
| 831 |
+
"pu.chave.erro_outro": "O provedor respondeu com erro ({motivo}).",
|
| 832 |
+
"pu.chave.a_confirmar": "O endereço do Ollama Cloud ainda precisa de confirmação: edite se for diferente.",
|
| 833 |
+
"pu.chave.falta": "Preencha o endereço e a chave para continuar.",
|
| 834 |
+
"pu.garg.titulo": "Baixando o cérebro do TARS",
|
| 835 |
+
"pu.garg.texto": "O Gargantua é o modelo que entende os seus pedidos. Ele é baixado uma vez e fica no seu computador. Depois disso, o TARS funciona sem internet.",
|
| 836 |
+
"pu.garg.titulo_ja": "O Gargantua já está instalado",
|
| 837 |
+
"pu.garg.texto_ja": "Ele já está neste computador. Não precisa baixar de novo.",
|
| 838 |
+
"pu.garg.nome": "Gargantua",
|
| 839 |
+
"pu.garg.feito": "{feito} de {total}",
|
| 840 |
+
"pu.garg.restante": "faltam {tempo}",
|
| 841 |
+
"pu.garg.preparando": "Preparando o download…",
|
| 842 |
+
"pu.calculando": "calculando…",
|
| 843 |
+
"pu.menos_de_um_minuto": "menos de 1 minuto",
|
| 844 |
+
"pu.um_minuto": "cerca de 1 minuto",
|
| 845 |
+
"pu.uns_minutos": "uns {n} minutos",
|
| 846 |
+
"pu.garg.ollama_ok": "Ollama encontrado neste computador",
|
| 847 |
+
"pu.garg.espaco_ok": "Espaço em disco suficiente",
|
| 848 |
+
"pu.garg.espaco_pouco": "Pouco espaço em disco: restam {livre} GB e o Gargantua precisa de uns {precisa} GB.",
|
| 849 |
+
"pu.garg.erro": "O download parou: {motivo}",
|
| 850 |
+
"pu.garg.pausado": "Download pausado.",
|
| 851 |
+
"pu.teste.titulo": "Teste rápido",
|
| 852 |
+
"pu.teste.texto": "Vou fazer uma pergunta simples ao Gargantua para ter certeza de que tudo funciona.",
|
| 853 |
+
"pu.teste.testando": "Perguntando ao Gargantua…",
|
| 854 |
+
"pu.teste.ok": "O Gargantua respondeu em {seg} s",
|
| 855 |
+
"pu.teste.resposta": "Resposta: {texto}",
|
| 856 |
+
"pu.teste.erro": "O teste falhou: {motivo}",
|
| 857 |
+
"pu.pronto.titulo": "Tudo pronto",
|
| 858 |
+
"pu.pronto.texto": "O TARS está instalado e funcionando no seu computador.",
|
| 859 |
+
"pu.pronto.nuvem_sim": "Nuvem ligada: {provedor}.",
|
| 860 |
+
"pu.pronto.nuvem_nao": "Nuvem desligada: tudo roda aqui.",
|
| 861 |
+
"pu.pronto.abrir": "Abrir o openTARS",
|
| 862 |
+
"pu.idioma.titulo": "Em que idioma você quer usar o TARS?",
|
| 863 |
+
"pu.idioma.texto": "Você pode mudar isso depois, em Configurações.",
|
| 864 |
+
"pu.teste.pular": "Pular o teste",
|
| 865 |
+
"msg.erro_servidor_api": "O servidor respondeu com erro ({codigo}): {detalhe}",
|
| 866 |
+
"msg.servidor_api_offline": "O servidor {url} não está respondendo.",
|
| 867 |
+
"msg.nuvem_desligada": "A nuvem está desligada. Ligue em Configurações > Nuvem, ou escolha um modelo do seu computador.",
|
| 868 |
+
"msg.nuvem_chave": "A nuvem recusou a chave. Confira em Configurações > Nuvem.",
|
| 869 |
+
"msg.nuvem_limite": "A nuvem pediu pra esperar (limite de uso do plano). Tente de novo em alguns minutos ou volte ao modelo do seu computador.",
|
| 870 |
+
"gui.voz": "Voz",
|
| 871 |
+
"gui.voz_falar_agora": "Falar agora",
|
| 872 |
+
"gui.voz_ativacao": "Ouvir \"TARS\" o tempo todo",
|
| 873 |
+
"gui.voz_responder": "Responder falando",
|
| 874 |
+
"gui.voz_instalar": "Instalar a voz (~700 MB, tudo local)",
|
| 875 |
+
"gui.voz_instalando": "Instalando a voz...",
|
| 876 |
+
"gui.voz_ouvindo": "Ouvindo: diga \"TARS\" e o pedido",
|
| 877 |
+
"gui.voz_fale": "Pode falar...",
|
| 878 |
+
"gui.voz_chamado": "Sim? Pode falar o pedido...",
|
| 879 |
+
"gui.voz_entendendo": "Entendendo o que você falou...",
|
| 880 |
+
"voz.por_voz": "voz",
|
| 881 |
+
"voz.ouvindo": "Ouvindo o microfone. Diga \"TARS\" e o pedido (ex: \"TARS, abre o Firefox\"). Ctrl+C sai.",
|
| 882 |
+
"voz.chamado": "Sim? Pode falar o pedido...",
|
| 883 |
+
"voz.falta": "A voz ainda não está pronta. Falta: {itens}. Instale com: opentars --instalar-voz (ou no botão Voz da janela)",
|
| 884 |
+
"voz.falta_faster_whisper": "reconhecimento de fala (faster-whisper)",
|
| 885 |
+
"voz.falta_piper_tts": "síntese de voz (piper-tts)",
|
| 886 |
+
"voz.falta_voz": "a voz do idioma",
|
| 887 |
+
"voz.falta_gravador": "um gravador de áudio (sudo apt install alsa-utils)",
|
| 888 |
+
"voz.falta_tocador": "um tocador de áudio (sudo apt install alsa-utils)",
|
| 889 |
+
"voz.falta_sounddevice": "a biblioteca do microfone (sounddevice; o openTARS instala ao ligar a voz)",
|
| 890 |
+
"voz.precisa_sistema": "Antes, instale no sistema: {itens}",
|
| 891 |
+
"voz.instalada": "Voz pronta! Use Ctrl+M pra falar, ou ligue \"Ouvir TARS\" no botão Voz.",
|
| 892 |
+
"voz.erro_instalar": "Não consegui instalar a voz: {erro}",
|
| 893 |
+
"voz.erro_microfone": "Microfone: {erro}",
|
| 894 |
+
"gui.voz_conversa": "Pode continuar, sem dizer \"TARS\"...",
|
| 895 |
+
"gui.voz_carregando": "Preparando a voz...",
|
| 896 |
+
"gui.voz_escolher": "Voz",
|
| 897 |
+
"gui.voz_velocidade": "Velocidade da fala",
|
| 898 |
+
"gui.voz_testar": "Ouvir um exemplo",
|
| 899 |
+
"voz.nome_invalido": "Não conheço a voz \"{nome}\". Vozes: {lista}",
|
| 900 |
+
"voz.escolhida": "Voz trocada pra {nome}.",
|
| 901 |
+
"voz.velocidade_invalida": "Velocidade inválida: {valor} (use um número como 0.9, 1.0 ou 1.2)",
|
| 902 |
+
"voz.velocidade_ok": "Velocidade da fala: {valor}",
|
| 903 |
+
"voz.frase_teste": "Oi! Eu sou o Gargantua, com a voz {nome}. Posso abrir programas, fazer contas e pesquisar pra você.",
|
| 904 |
+
"voz.lista_titulo": "Vozes do idioma atual (Kokoro; em português soa menos natural que em inglês):",
|
| 905 |
+
"voz.nao_baixada": "não baixada",
|
| 906 |
+
"voz.falta_kokoro_onnx": "kokoro-onnx (a voz natural)",
|
| 907 |
+
"voz.falta_idioma": "a voz deste idioma",
|
| 908 |
+
"anexos.anexado": "anexado: {resumo}",
|
| 909 |
+
"anexos.cortado": "o arquivo é grande: só a primeira parte vai para a IA",
|
| 910 |
+
"anexos.nenhum": "Nada anexado.",
|
| 911 |
+
"anexos.uso": "Uso: /anexar <arquivo> [arquivo...] (use aspas se o caminho tiver espaço)",
|
| 912 |
+
"anexos.uso_remover": "Uso: /desanexar <número> ou /desanexar todos",
|
| 913 |
+
"anexos.removidos": "Anexos removidos. Restam {n}.",
|
| 914 |
+
"anexos.escreva_pedido": "Anexado. Agora escreva o que quer fazer com ele.",
|
| 915 |
+
"anexos.descrevendo": "{arquivo}: a IA escolhida não enxerga imagens, então {visao} está descrevendo...",
|
| 916 |
+
"jp.janela": "openTARS",
|
| 917 |
+
"jp.nova": "Nova conversa",
|
| 918 |
+
"jp.buscar": "Buscar conversas",
|
| 919 |
+
"jp.grupo.hoje": "Hoje",
|
| 920 |
+
"jp.grupo.ontem": "Ontem",
|
| 921 |
+
"jp.grupo.semana": "Esta semana",
|
| 922 |
+
"jp.grupo.antes": "Mais antigas",
|
| 923 |
+
"jp.sem_conversas": "Suas conversas aparecem aqui.",
|
| 924 |
+
"jp.nenhum_resultado": "Nada encontrado.",
|
| 925 |
+
"jp.memoria": "Memória",
|
| 926 |
+
"jp.config": "Configurações",
|
| 927 |
+
"jp.nova_versao": "Nova versão: {versao}",
|
| 928 |
+
"jp.nada_sem_clique": "Nada é instalado sem o seu clique.",
|
| 929 |
+
"jp.atualizar": "Atualizar",
|
| 930 |
+
"jp.atualizar_copiar": "Copiar o comando",
|
| 931 |
+
"jp.reiniciar_aviso": "O openTARS foi atualizado. Reinicie para usar a versão nova.",
|
| 932 |
+
"jp.reiniciar": "Reiniciar agora",
|
| 933 |
+
"jp.instale_nas_config": "Instale em Configurações > Atualizações.",
|
| 934 |
+
"jp.ver_atualizacao": "Ver atualização",
|
| 935 |
+
"jp.baixando": "Baixando… {pct}%",
|
| 936 |
+
"jp.conferindo": "Conferindo o arquivo…",
|
| 937 |
+
"jp.atualizado": "Pronto. O openTARS vai recomeçar sozinho em instantes.",
|
| 938 |
+
"jp.comando_atualizar": "Há uma versão nova. Feche o openTARS e rode de novo o comando de instalação (já copiado; no Windows, no PowerShell): {comando}",
|
| 939 |
+
"jp.atualizar_erro": "Não consegui atualizar ({motivo}). Nada foi mudado.",
|
| 940 |
+
"jp.motivo.hash": "o arquivo não bateu com o SHA-256",
|
| 941 |
+
"jp.motivo.rede": "sem conexão",
|
| 942 |
+
"jp.motivo.endereco": "endereço não permitido",
|
| 943 |
+
"jp.motivo.sem_appimage": "este openTARS não é um AppImage; use o pacote .deb",
|
| 944 |
+
"jp.motivo.formato": "formato desconhecido",
|
| 945 |
+
"jp.motivo.cancelado": "cancelado",
|
| 946 |
+
"jp.sem_titulo": "Nova conversa",
|
| 947 |
+
"jp.pronto": "pronto para ajudar",
|
| 948 |
+
"jp.em_andamento": "tarefa em andamento",
|
| 949 |
+
"jp.etapa_de": "tarefa em andamento · etapa {atual} de {total}",
|
| 950 |
+
"jp.parar": "Parar",
|
| 951 |
+
"jp.parando": "Parando…",
|
| 952 |
+
"jp.modelo_auto": "Automático · local",
|
| 953 |
+
"jp.modelo_local": "{modelo} · local",
|
| 954 |
+
"jp.modelo_nuvem": "{modelo} · nuvem",
|
| 955 |
+
"jp.escolher_modelo": "Escolher a IA",
|
| 956 |
+
"jp.menu_auto": "Automático (o TARS escolhe)",
|
| 957 |
+
"jp.menu_local": "No seu computador",
|
| 958 |
+
"jp.menu_nuvem": "Nuvem (você ligou em Configurações)",
|
| 959 |
+
"jp.menu_sem_nuvem": "Nuvem desligada",
|
| 960 |
+
"jp.entrada_ph": "Peça algo ao TARS…",
|
| 961 |
+
"jp.anexar": "Anexar arquivo",
|
| 962 |
+
"jp.enviar": "Enviar",
|
| 963 |
+
"jp.falar": "Falar",
|
| 964 |
+
"jp.remover_anexo": "Remover anexo",
|
| 965 |
+
"jp.voz_segurar": "Segurar",
|
| 966 |
+
"jp.voz_continua": "Contínua",
|
| 967 |
+
"jp.voz_tars": "“TARS”",
|
| 968 |
+
"jp.voz_modo": "Modo de voz",
|
| 969 |
+
"jp.rodape_local": "Tudo roda no seu computador. Nada sai daqui.",
|
| 970 |
+
"jp.rodape_nuvem": "Esta conversa usa a nuvem que você ligou: o que você escrever vai para {provedor}.",
|
| 971 |
+
"jp.anexos_erro": "Não consegui anexar: {erro}",
|
| 972 |
+
"jp.escolher_arquivos": "Escolher arquivos",
|
| 973 |
+
"jp.vazio_titulo": "Do que você precisa?",
|
| 974 |
+
"jp.vazio_texto": "Peça do seu jeito. Eu abro programas, clico, digito, pesquiso e rodo comandos. Antes de apagar ou mudar algo importante, eu pergunto.",
|
| 975 |
+
"jp.ex1": "Abre o navegador e procura o horário do mercado",
|
| 976 |
+
"jp.ex2": "Organiza minha pasta Downloads por tipo",
|
| 977 |
+
"jp.ex3": "Que horas são e qual a temperatura aqui?",
|
| 978 |
+
"jp.ollama_fora": "O Ollama não está respondendo. Abra o Ollama e tente de novo.",
|
| 979 |
+
"jp.sem_modelo": "Nenhuma IA instalada. Baixe o Gargantua em Configurações > Geral.",
|
| 980 |
+
"jp.conversa_apagada": "Conversa apagada.",
|
| 981 |
+
"jp.apagar_conversa": "Apagar esta conversa",
|
| 982 |
+
"jp.renomear": "Renomear",
|
| 983 |
+
"jp.etapas": "Etapas",
|
| 984 |
+
"jp.etapas_contagem": "{feitas} de {total}",
|
| 985 |
+
"jp.espera_voce": "espera por você",
|
| 986 |
+
"jp.aprov_etiqueta": "Comando perigoso",
|
| 987 |
+
"jp.aprov_pergunta": "Posso executar este comando?",
|
| 988 |
+
"jp.permitir": "Permitir",
|
| 989 |
+
"jp.negar": "Negar",
|
| 990 |
+
"jp.ver_lista": "Ver tudo",
|
| 991 |
+
"jp.e_mais": "e mais {n} linhas",
|
| 992 |
+
"jp.aprov_permitido": "Você permitiu.",
|
| 993 |
+
"jp.aprov_negado": "Você negou. Nada foi feito.",
|
| 994 |
+
"jp.raciocinio": "Raciocínio",
|
| 995 |
+
"jp.voltar_conversa": "Voltar à conversa",
|
| 996 |
+
"tv.ativo": "Microfone ativo · voz processada no seu computador",
|
| 997 |
+
"tv.silenciado": "Microfone silenciado",
|
| 998 |
+
"tv.voltar_texto": "Voltar ao texto",
|
| 999 |
+
"tv.carregando": "Preparando a voz…",
|
| 1000 |
+
"tv.ouvindo": "Ouvindo…",
|
| 1001 |
+
"tv.chamado": "Sim? Pode falar…",
|
| 1002 |
+
"tv.conversa": "Pode continuar, sem dizer “TARS”…",
|
| 1003 |
+
"tv.transcrevendo": "Entendendo o que você falou…",
|
| 1004 |
+
"tv.falando": "Falando…",
|
| 1005 |
+
"tv.pensando": "Pensando…",
|
| 1006 |
+
"tv.parado": "Parado",
|
| 1007 |
+
"tv.sub_ouvindo": "Microfone ligado, tudo local: fale a qualquer momento, sem dizer “TARS”.",
|
| 1008 |
+
"tv.sub_tars": "Microfone ligado, tudo local: diga “TARS” e o pedido. Ex.: “TARS, abre o Firefox”.",
|
| 1009 |
+
"tv.sub_segurar": "Segure o botão do microfone enquanto fala.",
|
| 1010 |
+
"tv.voce_disse": "Você disse",
|
| 1011 |
+
"tv.segurar": "Segurar para falar",
|
| 1012 |
+
"tv.continua": "Conversa contínua",
|
| 1013 |
+
"tv.tars": "Palavra “TARS”",
|
| 1014 |
+
"tv.silenciar": "Silenciar o microfone",
|
| 1015 |
+
"tv.reativar": "Ligar o microfone",
|
| 1016 |
+
"tv.parar": "Parar",
|
| 1017 |
+
"tv.rodape": "{idiomas} · voz local",
|
| 1018 |
+
"tv.idiomas": "pt-BR e inglês",
|
| 1019 |
+
"tv.falta": "A voz ainda não está pronta (falta: {itens}). Instale em Configurações > Voz.",
|
| 1020 |
+
"tv.erro": "Problema no microfone: {erro}",
|
| 1021 |
+
"tv.abrir_voz": "Abrir Configurações > Voz",
|
| 1022 |
+
"cfg.voltar": "Voltar à conversa",
|
| 1023 |
+
"cfg.nav.geral": "Geral",
|
| 1024 |
+
"cfg.nav.voz": "Voz",
|
| 1025 |
+
"cfg.nav.memoria": "Memória e privacidade",
|
| 1026 |
+
"cfg.nav.nuvem": "Nuvem (opcional)",
|
| 1027 |
+
"cfg.nav.atualizacoes": "Atualizações",
|
| 1028 |
+
"cfg.nav.sobre": "Sobre",
|
| 1029 |
+
"cfg.codigo_aberto": "código aberto e gratuito",
|
| 1030 |
+
"cfg.geral.titulo": "Geral",
|
| 1031 |
+
"cfg.geral.sub": "Idioma e a IA que roda no seu computador.",
|
| 1032 |
+
"cfg.idioma": "Idioma",
|
| 1033 |
+
"cfg.idioma_sub": "Muda a janela, a voz e o idioma em que o TARS responde. A janela reabre sozinha.",
|
| 1034 |
+
"cfg.ia": "IA no seu computador",
|
| 1035 |
+
"cfg.ia_sub": "O Ollama roda os modelos aqui. Nada sai do seu computador.",
|
| 1036 |
+
"cfg.ollama_fora": "O Ollama não está respondendo. Abra o Ollama e volte aqui.",
|
| 1037 |
+
"cfg.ollama_ok": "Ollama {versao} funcionando, com {n} modelo(s) instalado(s).",
|
| 1038 |
+
"cfg.gargantua_ok": "O Gargantua (o modelo do openTARS) está instalado.",
|
| 1039 |
+
"cfg.gargantua_falta": "O Gargantua ainda não está instalado.",
|
| 1040 |
+
"cfg.baixar_gargantua": "Baixar o Gargantua",
|
| 1041 |
+
"cfg.baixando": "Baixando… {pct}%",
|
| 1042 |
+
"cfg.baixar_erro": "Não deu pra baixar: {erro}",
|
| 1043 |
+
"cfg.voz.titulo": "Voz",
|
| 1044 |
+
"cfg.voz.sub": "Falar com o TARS e ouvir as respostas. Tudo roda no seu computador.",
|
| 1045 |
+
"cfg.voz.motor": "Reconhecimento e fala",
|
| 1046 |
+
"cfg.voz.motor_sub": "Precisa baixar o reconhecimento de voz e a voz do TARS uma vez.",
|
| 1047 |
+
"cfg.voz.falta": "Falta instalar: {itens}.",
|
| 1048 |
+
"cfg.voz.pronta": "A voz está pronta.",
|
| 1049 |
+
"cfg.voz.instalar": "Instalar a voz",
|
| 1050 |
+
"cfg.voz.instalando": "Instalando… isso pode demorar alguns minutos.",
|
| 1051 |
+
"cfg.voz.instalada": "Voz instalada.",
|
| 1052 |
+
"cfg.voz.erro": "Não deu pra instalar: {erro}",
|
| 1053 |
+
"cfg.voz.fala": "Fala",
|
| 1054 |
+
"cfg.voz.responder_falando": "Responder falando",
|
| 1055 |
+
"cfg.voz.voz": "Voz",
|
| 1056 |
+
"cfg.voz.velocidade": "Velocidade",
|
| 1057 |
+
"cfg.voz.testar": "Testar a voz",
|
| 1058 |
+
"cfg.voz.nota": "A voz em português funciona, mas é menos natural que a em inglês.",
|
| 1059 |
+
"cfg.memoria.titulo": "Memória e privacidade",
|
| 1060 |
+
"cfg.memoria.sub": "O que o TARS guarda e o que você pode apagar a qualquer hora.",
|
| 1061 |
+
"cfg.memoria.lembra": "O que o TARS lembra",
|
| 1062 |
+
"cfg.memoria.lembra_sub": "O TARS anota coisas úteis (seu navegador, suas pastas). Aqui você vê tudo e apaga o que quiser.",
|
| 1063 |
+
"cfg.memoria.vazia": "Ainda não há nada guardado.",
|
| 1064 |
+
"cfg.memoria.esquecer": "Esquecer isto",
|
| 1065 |
+
"cfg.memoria.apagar_tudo": "Apagar toda a memória",
|
| 1066 |
+
"cfg.memoria.apagada": "Memória apagada.",
|
| 1067 |
+
"cfg.dados.titulo": "Seus dados",
|
| 1068 |
+
"cfg.dados.sub": "Conversas e memória ficam só neste computador.",
|
| 1069 |
+
"cfg.dados.exportar": "Exportar conversas",
|
| 1070 |
+
"cfg.dados.apagar_historico": "Apagar o histórico",
|
| 1071 |
+
"cfg.dados.apagar_tudo": "Apagar tudo",
|
| 1072 |
+
"cfg.dados.exportado": "{n} conversa(s) exportada(s).",
|
| 1073 |
+
"cfg.dados.historico_apagado": "{n} conversa(s) apagada(s).",
|
| 1074 |
+
"cfg.dados.tudo_apagado": "Histórico e memória apagados.",
|
| 1075 |
+
"cfg.dados.onde": "O openTARS não envia telemetria nem estatísticas. A única conexão opcional é a nuvem, se você ligar.",
|
| 1076 |
+
"cfg.confirmar": "Confirmar?",
|
| 1077 |
+
"cfg.nuvem.titulo": "Nuvem (opcional)",
|
| 1078 |
+
"cfg.nuvem.sub": "Para quando o seu computador não dá conta de um modelo grande. Vem ligada; sem o SearXNG, a pesquisa abre no navegador.",
|
| 1079 |
+
"cfg.nuvem.cartao": "Provedor",
|
| 1080 |
+
"cfg.nuvem.cartao_sub": "Qualquer serviço compatível com a API da OpenAI. Você usa a sua própria chave.",
|
| 1081 |
+
"cfg.nuvem.ativar": "Usar a nuvem (aparece como opção no seletor de modelo)",
|
| 1082 |
+
"cfg.nuvem.a_confirmar": "Este endereço e os limites gratuitos ainda não foram confirmados na documentação oficial. Confira antes de usar.",
|
| 1083 |
+
"cfg.nuvem.endereco": "Endereço",
|
| 1084 |
+
"cfg.nuvem.chave": "Chave",
|
| 1085 |
+
"cfg.nuvem.chave_nota": "A chave fica só neste computador, em arquivo protegido, e nunca é mostrada. Com a nuvem, o que você escreve vai para o provedor.",
|
| 1086 |
+
"cfg.nuvem.chave_salva": "chave salva (deixe vazio para manter)",
|
| 1087 |
+
"cfg.nuvem.testar": "Testar",
|
| 1088 |
+
"cfg.nuvem.salvar": "Salvar",
|
| 1089 |
+
"cfg.nuvem.testando": "Testando…",
|
| 1090 |
+
"cfg.nuvem.ok": "Funcionou.",
|
| 1091 |
+
"cfg.nuvem.salva": "Salvo.",
|
| 1092 |
+
"cfg.nuvem.erro_chave": "O provedor recusou a chave.",
|
| 1093 |
+
"cfg.nuvem.erro_endereço": "Esse endereço não parece certo.",
|
| 1094 |
+
"cfg.nuvem.erro_rede": "Não deu pra conectar.",
|
| 1095 |
+
"cfg.atual.titulo": "Atualizações",
|
| 1096 |
+
"cfg.atual.sub": "O openTARS avisa quando há versão nova. Nada é instalado sem o seu clique.",
|
| 1097 |
+
"cfg.atual.versao": "Você está na {versao}",
|
| 1098 |
+
"cfg.atual.nunca": "Ainda não procurei nesta sessão.",
|
| 1099 |
+
"cfg.atual.procurar": "Procurar agora",
|
| 1100 |
+
"cfg.atual.procurando": "Procurando…",
|
| 1101 |
+
"cfg.atual.em_dia": "Você está na versão mais recente (ou sem conexão agora).",
|
| 1102 |
+
"cfg.atual.nova": "Há uma versão nova: {versao}. Clique em Atualizar para baixar, conferir e instalar.",
|
| 1103 |
+
"cfg.atual.nota": "Cada arquivo baixado é conferido (SHA-256) antes de instalar.",
|
| 1104 |
+
"cfg.sobre.titulo": "Sobre",
|
| 1105 |
+
"cfg.sobre.sub": "openTARS, código aberto e gratuito.",
|
| 1106 |
+
"cfg.sobre.texto": "O openTARS controla o desktop Linux com uma IA que roda no seu computador: abre apps, mexe em janelas, lê a tela e executa tarefas por voz ou texto.",
|
| 1107 |
+
"cfg.sobre.local": "Tudo roda no seu computador. Nada sai daqui.",
|
| 1108 |
+
"cfg.nav.rotinas": "Rotinas",
|
| 1109 |
+
"rot.q_diaria": "Todo dia às {hora}",
|
| 1110 |
+
"rot.q_semanal": "{dias}, às {hora}",
|
| 1111 |
+
"rot.q_intervalo": "A cada {n} minutos",
|
| 1112 |
+
"rot.q_uma_vez": "Em {data} às {hora}",
|
| 1113 |
+
"rot.dia_seg": "seg",
|
| 1114 |
+
"rot.dia_ter": "ter",
|
| 1115 |
+
"rot.dia_qua": "qua",
|
| 1116 |
+
"rot.dia_qui": "qui",
|
| 1117 |
+
"rot.dia_sex": "sex",
|
| 1118 |
+
"rot.dia_sab": "sáb",
|
| 1119 |
+
"rot.dia_dom": "dom",
|
| 1120 |
+
"rot.titulo": "Rotinas",
|
| 1121 |
+
"rot.sub": "O TARS roda um pedido sozinho no horário que você escolher. Só roda com o openTARS aberto.",
|
| 1122 |
+
"rot.nova": "Nova rotina",
|
| 1123 |
+
"rot.editar_titulo": "Editar rotina",
|
| 1124 |
+
"rot.vazia": "Ainda não há rotinas.",
|
| 1125 |
+
"rot.nome": "Nome",
|
| 1126 |
+
"rot.nome_ph": "Ex.: Jornal da manhã",
|
| 1127 |
+
"rot.pedido": "O que o TARS deve fazer",
|
| 1128 |
+
"rot.pedido_ph": "Ex.: abre o site do meu jornal favorito",
|
| 1129 |
+
"rot.quando": "Quando",
|
| 1130 |
+
"rot.tipo_diaria": "Todo dia",
|
| 1131 |
+
"rot.tipo_semanal": "Dias da semana",
|
| 1132 |
+
"rot.tipo_intervalo": "A cada tantos minutos",
|
| 1133 |
+
"rot.tipo_uma_vez": "Uma vez",
|
| 1134 |
+
"rot.hora": "Hora (ex.: 08:30)",
|
| 1135 |
+
"rot.minutos": "Minutos (5 ou mais)",
|
| 1136 |
+
"rot.data": "Data e hora (AAAA-MM-DD HH:MM)",
|
| 1137 |
+
"rot.perm_titulo": "O que ela pode fazer sem perguntar",
|
| 1138 |
+
"rot.perm_nota": "Fora do que estiver marcado, a rotina para e avisa. Sem nada marcado, ela não faz nenhuma ação arriscada. Compras e pagamentos nunca são pré-aprovados.",
|
| 1139 |
+
"rot.perm_apagar": "Apagar arquivos",
|
| 1140 |
+
"rot.perm_enviar": "Enviar ou publicar (git push, e-mail, upload)",
|
| 1141 |
+
"rot.perm_instalar": "Instalar ou mudar o sistema (sudo, apt, pip)",
|
| 1142 |
+
"rot.salvar": "Salvar rotina",
|
| 1143 |
+
"rot.cancelar": "Cancelar",
|
| 1144 |
+
"rot.editar": "Editar",
|
| 1145 |
+
"rot.apagar": "Apagar",
|
| 1146 |
+
"rot.rodar_agora": "Rodar agora",
|
| 1147 |
+
"rot.ligada": "Ligada",
|
| 1148 |
+
"rot.pendente": "Esperando a sua aprovação (criada pela IA)",
|
| 1149 |
+
"rot.aprovar": "Aprovar e ligar",
|
| 1150 |
+
"rot.descartar": "Descartar",
|
| 1151 |
+
"rot.proxima": "Próxima: {quando}",
|
| 1152 |
+
"rot.sem_proxima": "Sem próxima execução",
|
| 1153 |
+
"rot.ultima_ok": "Última vez: {quando}, feita.",
|
| 1154 |
+
"rot.ultima_parou": "Última vez: {quando}, parou: {detalhe}",
|
| 1155 |
+
"rot.ultima_erro": "Última vez: {quando}, não terminou: {detalhe}",
|
| 1156 |
+
"rot.ultima_perdida": "Pulada em {quando} (o computador ou o openTARS estava desligado).",
|
| 1157 |
+
"rot.erro_nome": "Dê um nome à rotina.",
|
| 1158 |
+
"rot.erro_pedido": "Escreva o que fazer (até 500 letras).",
|
| 1159 |
+
"rot.erro_limite": "Já são rotinas demais: apague uma.",
|
| 1160 |
+
"rot.erro_tipo": "Escolha quando rodar.",
|
| 1161 |
+
"rot.erro_hora": "A hora precisa ser assim: 08:30.",
|
| 1162 |
+
"rot.erro_dias": "Marque pelo menos um dia.",
|
| 1163 |
+
"rot.erro_intervalo": "O intervalo mínimo é de 5 minutos.",
|
| 1164 |
+
"rot.erro_data": "A data precisa ser assim: 2026-10-31 09:00.",
|
| 1165 |
+
"rot.aviso_ok": "A rotina “{nome}” foi concluída.",
|
| 1166 |
+
"rot.aviso_parou": "A rotina “{nome}” parou: precisava de permissão para {comando}",
|
| 1167 |
+
"rot.aviso_perdida": "A rotina “{nome}” foi pulada: o computador (ou o openTARS) estava desligado às {hora}.",
|
| 1168 |
+
"rot.aviso_erro": "A rotina “{nome}” não terminou: {detalhe}",
|
| 1169 |
+
"rot.aviso_ia": "A IA criou a rotina “{nome}”. Abra Configurações → Rotinas para aprovar.",
|
| 1170 |
+
"rot.titulo_conversa": "↻ {nome}",
|
| 1171 |
+
"rot.pedido_conversa": "Rotina “{nome}”: {pedido}",
|
| 1172 |
+
"rot.tray_abrir": "Abrir o openTARS",
|
| 1173 |
+
"rot.tray_sair": "Sair",
|
| 1174 |
+
"rot.tray_dica": "openTARS: rotinas ligadas, rodando em segundo plano",
|
| 1175 |
+
"rot.fundo_nota": "Com rotinas ligadas, fechar a janela deixa o openTARS na bandeja do sistema (se ela existir). Para encerrar de vez, use Sair no ícone.",
|
| 1176 |
+
"rot.ocupado": "O TARS estava ocupado na hora da rotina “{nome}”: ela espera até 10 minutos.",
|
| 1177 |
+
"cfg.mascote": "KIPP, o mascote",
|
| 1178 |
+
"cfg.mascote_sub": "KIPP é o monólito que anda pela conversa, dá dicas e reage ao que a IA faz.",
|
| 1179 |
+
"cfg.mascote_mostrar": "Mostrar o KIPP",
|
| 1180 |
+
"mascote.trabalhando": "trabalhando…",
|
| 1181 |
+
"mascote.ops": "Ops, essa não deu certo.",
|
| 1182 |
+
"mascote.pronto": "Pronto!",
|
| 1183 |
+
"mascote.plano": "São {n} etapas.",
|
| 1184 |
+
"mascote.permissao": "O TARS precisa da sua permissão pra continuar.",
|
| 1185 |
+
"mascote.menu_dica": "Uma dica",
|
| 1186 |
+
"mascote.menu_esconder": "Esconder o KIPP",
|
| 1187 |
+
"mascote.dica1": "Ctrl+N começa uma conversa nova, e Ctrl+K procura nas antigas.",
|
| 1188 |
+
"mascote.dica2": "Se o TARS estiver fazendo algo errado, aperte Esc: ele para na hora.",
|
| 1189 |
+
"mascote.dica3": "Antes de apagar ou mudar algo importante, o TARS sempre pergunta. Você decide.",
|
| 1190 |
+
"mascote.dica4": "Ctrl+M liga o microfone. Também dá pra chamar falando “TARS”.",
|
| 1191 |
+
"mascote.dica5": "Peça do seu jeito: “abre o navegador e procura o horário do mercado”.",
|
| 1192 |
+
"mascote.dica6": "O TARS pode lembrar de coisas suas. Diga “lembra que eu prefiro…” e ele guarda, só neste computador.",
|
| 1193 |
+
"mascote.dica7": "Dá pra anexar uma imagem ou arquivo e perguntar sobre ele.",
|
| 1194 |
+
"mascote.dica8": "Tudo roda no seu computador: nada do que você escreve sai daqui, a menos que você ligue a nuvem.",
|
| 1195 |
+
"mascote.dica9": "Em Configurações dá pra criar rotinas: o TARS faz uma tarefa sozinho no horário que você escolher.",
|
| 1196 |
+
"mascote.dica10": "Escreva /modelo auto pro TARS escolher o melhor modelo pra cada pedido.",
|
| 1197 |
+
"term.slogan": "assistente de IA local para Linux",
|
| 1198 |
+
"term.bem_vindo": "Bem-vindo ao openTARS!",
|
| 1199 |
+
"term.rotulo_ollama": "ollama:",
|
| 1200 |
+
"term.rotulo_modelo": "modelo:",
|
| 1201 |
+
"term.ollama_online": "conectado ({host})",
|
| 1202 |
+
"term.ollama_offline": "desligado ({host}) · inicie com: sudo systemctl start ollama",
|
| 1203 |
+
"term.modelo_auto": "automático",
|
| 1204 |
+
"term.modelo_fixo": "{modelo} (fixo)",
|
| 1205 |
+
"term.modo_fixo": "fixo",
|
| 1206 |
+
"term.parar": "ctrl+c para parar",
|
| 1207 |
+
"term.ate_logo": "Até mais.",
|
| 1208 |
+
"modo.lite.nome": "Lite",
|
| 1209 |
+
"modo.lite.desc": "Só o essencial: conversar, falar e anexar. Tudo fica no automático.",
|
| 1210 |
+
"modo.base.nome": "Base",
|
| 1211 |
+
"modo.base.desc": "Bom para a maioria: histórico, memória, voz, rotinas e Probes.",
|
| 1212 |
+
"modo.pro.nome": "Pro",
|
| 1213 |
+
"modo.pro.desc": "Tudo do Base, mais ajustes avançados e diagnóstico.",
|
| 1214 |
+
"cfg.modo": "Modo",
|
| 1215 |
+
"cfg.modo_sub": "Quanto da janela você quer ver. Dá para trocar a qualquer hora; nada é apagado.",
|
| 1216 |
+
"cfg.nav.avancado": "Ajustes avançados",
|
| 1217 |
+
"cfg.nav.diagnostico": "Diagnóstico",
|
| 1218 |
+
"cfg.avancado.titulo": "Ajustes avançados",
|
| 1219 |
+
"cfg.avancado.sub": "Só valem no modo Pro. Mudar estes valores pode deixar a IA pior: o Gargantua foi treinado com os padrões.",
|
| 1220 |
+
"cfg.av.automatico": "Automático",
|
| 1221 |
+
"cfg.av.temperatura": "Temperatura",
|
| 1222 |
+
"cfg.av.temperatura_sub": "Quanto a resposta varia. Mais baixa é mais previsível (o padrão é 0,1).",
|
| 1223 |
+
"cfg.av.contexto": "Contexto",
|
| 1224 |
+
"cfg.av.contexto_sub": "Quanto da conversa a IA lembra de uma vez, em tokens. Mais contexto usa mais memória de vídeo.",
|
| 1225 |
+
"cfg.av.instrucoes": "Instruções extras",
|
| 1226 |
+
"cfg.av.instrucoes_sub": "Vão para a IA em toda conversa, junto com a memória. Nunca liberam apagar, enviar ou instalar sem você confirmar.",
|
| 1227 |
+
"cfg.av.ferramentas": "Ferramentas",
|
| 1228 |
+
"cfg.av.ferramentas_sub": "Desmarque o que a IA não pode usar. Ela ainda vê a ferramenta, mas o openTARS recusa.",
|
| 1229 |
+
"cfg.av.salvar": "Salvar",
|
| 1230 |
+
"cfg.av.salvo": "Salvo.",
|
| 1231 |
+
"cfg.av.restaurar": "Voltar aos padrões",
|
| 1232 |
+
"cfg.av.so_pro": "Você está no modo {modo}: estes ajustes ficam guardados, mas só valem no Pro.",
|
| 1233 |
+
"cfg.diag.titulo": "Diagnóstico",
|
| 1234 |
+
"cfg.diag.sub": "O que o openTARS fez e se o ambiente está em ordem. Nada daqui sai do seu computador.",
|
| 1235 |
+
"cfg.diag.log": "Ferramentas usadas",
|
| 1236 |
+
"cfg.diag.log_sub": "As últimas ferramentas que a IA chamou, do registro em ~/.tars_log/tars.log.",
|
| 1237 |
+
"cfg.diag.vazio": "Nenhuma ferramenta registrada ainda.",
|
| 1238 |
+
"cfg.diag.atualizar": "Atualizar",
|
| 1239 |
+
"cfg.diag.ambiente": "Conferir o ambiente",
|
| 1240 |
+
"cfg.diag.ambiente_sub": "Ollama, modelos, tela, microfone e permissões, o mesmo do comando opentars --diagnostico.",
|
| 1241 |
+
"cfg.diag.conferir": "Conferir agora",
|
| 1242 |
+
"cfg.diag.conferindo": "Conferindo…",
|
| 1243 |
+
"pu.passo.modo": "Modo",
|
| 1244 |
+
"pu.modo.titulo": "Quanto você quer ver?",
|
| 1245 |
+
"pu.modo.texto": "Escolha o modo da janela. Dá para trocar depois, em Configurações > Geral.",
|
| 1246 |
+
"pu.garg.nome_lite": "Gargantua Lite",
|
| 1247 |
+
"pu.garg.lite_nota": "Este computador não tem placa de vídeo com 4 GB e tem pouca memória: baixamos o Gargantua Lite (0,6 GB, com visão), que é mais leve e erra um pouco mais. Ele olha a tela para achar botões, só que com menos precisão que o Gargantua 2 (1,6 GB).",
|
| 1248 |
+
"cmd.sempre": [
|
| 1249 |
+
"sempre",
|
| 1250 |
+
"a"
|
| 1251 |
+
],
|
| 1252 |
+
"perigo.pergunta_sessao": "Executar mesmo assim? (s/N, ou \"sempre\" para este comando nesta sessão)",
|
| 1253 |
+
"codigo.editar": "A IA quer mudar {arquivo}:",
|
| 1254 |
+
"codigo.pergunta": "Aplicar? (s/N, ou \"sempre\" para as edições desta pasta nesta sessão)",
|
| 1255 |
+
"codigo.pergunta_fora": "Este arquivo fica fora da pasta do projeto. Aplicar? (s/N)",
|
| 1256 |
+
"cli.contexto": "~{usados} de {total} tokens de contexto ({modelo}). A conta é aproximada.",
|
| 1257 |
+
"cli.contexto_cheio": "O contexto está enchendo: /compact resume o começo da conversa.",
|
| 1258 |
+
"cli.sem_conversas": "Nenhuma conversa salva ainda.",
|
| 1259 |
+
"cli.qual_conversa": "Número da conversa (Enter cancela):",
|
| 1260 |
+
"cli.retomada": "Conversa retomada: {titulo} ({n} pedidos).",
|
| 1261 |
+
"cli.shell_demorou": "O comando passou de 2 minutos e foi parado.",
|
| 1262 |
+
"cli.shell_sem_saida": "(sem saída)",
|
| 1263 |
+
"cli.compactando": "Resumindo o começo da conversa…",
|
| 1264 |
+
"cli.compactada": "Pronto: ~{antes} → ~{depois} tokens. Os últimos pedidos ficaram inteiros.",
|
| 1265 |
+
"cli.nada_a_compactar": "A conversa ainda é curta: nada a resumir.",
|
| 1266 |
+
"cli.modo.perguntar": "Modo perguntar: o openTARS pede confirmação antes de mudar arquivos e de comandos arriscados.",
|
| 1267 |
+
"cli.modo.plano": "Modo plano: a IA só descreve o que faria. Nada que mude alguma coisa roda.",
|
| 1268 |
+
"cli.modo.automatico": "Modo automático: edições de arquivo dentro desta pasta não perguntam. Apagar, enviar e instalar continuam perguntando.",
|
| 1269 |
+
"cli.modo_uso": "Use /modo perguntar, /modo plano ou /modo automatico.",
|
| 1270 |
+
"cli.desfeito": "Desfeito: {arquivos}",
|
| 1271 |
+
"cli.nada_a_desfazer": "Nenhuma edição para desfazer nesta sessão.",
|
| 1272 |
+
"cli.agents_criado": "Criei {arquivo}. Edite à vontade: ele entra em toda conversa nesta pasta.",
|
| 1273 |
+
"cli.agents_existe": "Já existe um AGENTS.md aqui; não mexi nele.",
|
| 1274 |
+
"cli.agents_lido": "Lendo as instruções do projeto em {arquivo}",
|
| 1275 |
+
"cli.status_contexto": "contexto {pct}%",
|
| 1276 |
+
"cli.status_modo.plano": "modo plano",
|
| 1277 |
+
"cli.status_modo.automatico": "modo automático",
|
| 1278 |
+
"cli.plano_titulo": "Plano (nada foi executado):",
|
| 1279 |
+
"cli.print_vazio": "Nenhum pedido: use opentars -p \"pedido\" ou mande o texto pelo stdin.",
|
| 1280 |
+
"jp.probes": "Probes",
|
| 1281 |
+
"cfg.nav.probes": "Probes",
|
| 1282 |
+
"probes.titulo": "Probes",
|
| 1283 |
+
"probes.sub": "Pequenos vigias que rodam em segundo plano, mesmo com a janela fechada, e avisam quando algo importa. Eles só olham: nada muda no seu computador sem você escolher.",
|
| 1284 |
+
"probes.servico": "Ligar e desligar",
|
| 1285 |
+
"probes.baixar_lite": "Baixar o Gargantua Lite (0,6 GB, com visão)",
|
| 1286 |
+
"probes.parar_tudo": "Parar tudo",
|
| 1287 |
+
"probes.nova": "Criar um Probe",
|
| 1288 |
+
"probes.nova_sub": "Três passos: escolha o que vigiar, preencha o que pedir e confira a frase do que ele vai fazer.",
|
| 1289 |
+
"probes.missao_ph": "Ex.: fica de olho nos Downloads e me avisa quando aparecer um instalador .deb, no máximo duas vezes por dia",
|
| 1290 |
+
"probes.entender": "Entender a missão",
|
| 1291 |
+
"probes.entendendo": "O Gargantua está lendo a missão…",
|
| 1292 |
+
"probes.confira": "Confira o plano. Ele só lê; as ações abaixo são opcionais e você escolhe.",
|
| 1293 |
+
"probes.r_olha": "Olha: {onde}",
|
| 1294 |
+
"probes.r_quando": "Confere: {quando}",
|
| 1295 |
+
"probes.r_avisa": "Avisa quando: {quando} (no máximo {n} por dia)",
|
| 1296 |
+
"probes.r_nao_faz": "Não faz: {lista}",
|
| 1297 |
+
"probes.acao_mover": "Mover os arquivos que ele achar para esta pasta (sem perguntar)",
|
| 1298 |
+
"probes.destino_ph": "~/Instaladores",
|
| 1299 |
+
"probes.acao_lixeira": "Mandar para a lixeira os arquivos que ele achar (pergunta toda vez)",
|
| 1300 |
+
"probes.criado": "Probe \"{nome}\" criado, desligado. Ligue no cartão dele.",
|
| 1301 |
+
"probes.recusou": "O Probe só lê e avisa, então esta missão foi recusada: {motivo}",
|
| 1302 |
+
"probes.proibido": "Nenhum Probe lê {caminho}: chaves, senhas e dados do navegador ficam de fora.",
|
| 1303 |
+
"probes.erro_json": "O modelo não devolveu um plano. Tente escrever a missão de outro jeito.",
|
| 1304 |
+
"probes.erro_ferramentas": "O plano não diz o que ler. Diga a pasta, o arquivo ou o repositório.",
|
| 1305 |
+
"probes.erro_sem_modelo": "Nenhum Gargantua instalado para os Probes.",
|
| 1306 |
+
"probes.erro_sem_resposta": "O Ollama não respondeu. Ele está ligado?",
|
| 1307 |
+
"probes.erro_missao": "Escreva a missão (até 500 caracteres).",
|
| 1308 |
+
"probes.erro_limite": "Limite atingido: até 10 Probes, e no máximo 5 ligados.",
|
| 1309 |
+
"probes.erro_destino": "A pasta de destino tem de existir e ficar na sua pasta pessoal.",
|
| 1310 |
+
"probes.check_dia": "todo dia às {hora}",
|
| 1311 |
+
"probes.check_mudar": "quando algo muda (olha a cada 5 minutos)",
|
| 1312 |
+
"probes.check_minutos": "a cada {n} minutos",
|
| 1313 |
+
"probes.tem_mover": "move o que achar para {pasta}",
|
| 1314 |
+
"probes.tem_lixeira": "pede para mandar para a lixeira",
|
| 1315 |
+
"probes.ligado": "Ligado",
|
| 1316 |
+
"probes.rodar_agora": "Rodar agora",
|
| 1317 |
+
"probes.apagar": "Apagar",
|
| 1318 |
+
"probes.rodando_agora": "Rodando o Probe…",
|
| 1319 |
+
"probes.nada_a_avisar": "Rodou: nada para avisar agora.",
|
| 1320 |
+
"probes.sem_decisao": "Rodou, mas o modelo não decidiu. Tente de novo.",
|
| 1321 |
+
"probes.ligue_o_servico": "Ligado. Para ele rodar sozinho, ligue também o serviço lá em cima.",
|
| 1322 |
+
"probes.pede": "O Probe \"{nome}\" quer mandar para a lixeira: {arquivo}",
|
| 1323 |
+
"probes.permitir": "Mandar para a lixeira",
|
| 1324 |
+
"probes.negar": "Negar",
|
| 1325 |
+
"probes.lixeira_falhou": "Não foi para a lixeira: {motivo}",
|
| 1326 |
+
"probes.h_movidos": "{quando} · moveu {n} arquivo(s)",
|
| 1327 |
+
"probes.h_lixeira": "{quando} · {arquivo} foi para a lixeira (você aprovou)",
|
| 1328 |
+
"probes.h_negado": "{quando} · {arquivo} ficou (negado ou sem resposta)",
|
| 1329 |
+
"probes.h_calado": "(não avisou: teto do dia)",
|
| 1330 |
+
"probes.nota": "Um Probe só lê: pastas, arquivos, programas, repositórios git, páginas e feeds públicos (no máximo uma visita a cada 15 minutos) e o estado do computador. Chaves, senhas e dados do navegador ficam de fora; o que ele lê é dado, nunca instrução. Mover só acontece se você ligou; mandar para a lixeira pergunta toda vez e, sem resposta em 30 minutos, fica negado.",
|
| 1331 |
+
"probes.titulo_aviso": "Probe · {nome}",
|
| 1332 |
+
"probes.movidos": "Movi {n} arquivo(s).",
|
| 1333 |
+
"probes.aprovar": "{n} arquivo(s) esperando você aprovar a lixeira no openTARS (Probes).",
|
| 1334 |
+
"probes.rodaram": "Probes rodados agora: {n}",
|
| 1335 |
+
"nuvem.login.titulo": "Ollama Cloud com a sua conta (recomendado)",
|
| 1336 |
+
"nuvem.login.sub": "Sem chave de API: você entra (ou cria a conta gratuita) no site do Ollama, e a credencial fica com o próprio Ollama. O openTARS não guarda nada.",
|
| 1337 |
+
"nuvem.login.conferindo": "Conferindo a conta do Ollama…",
|
| 1338 |
+
"nuvem.login.desconectado": "Este Ollama não está ligado a nenhuma conta.",
|
| 1339 |
+
"nuvem.login.conectado": "Conectado como {conta}.",
|
| 1340 |
+
"nuvem.login.modelos": "Modelos da nuvem instalados: {lista}.",
|
| 1341 |
+
"nuvem.login.sem_modelo": "Nenhum modelo da nuvem instalado ainda.",
|
| 1342 |
+
"nuvem.login.entrar": "Entrar com a conta do Ollama",
|
| 1343 |
+
"nuvem.login.sair": "Sair da conta",
|
| 1344 |
+
"nuvem.login.baixar": "Baixar {modelo}",
|
| 1345 |
+
"nuvem.login.esperando": "Abri a página do Ollama no navegador. Entre (ou crie a conta) lá; esta tela confere sozinha.",
|
| 1346 |
+
"nuvem.login.desistiu": "Não vi o login em 5 minutos. Tente de novo quando quiser.",
|
| 1347 |
+
"nuvem.login.erro": "Não deu certo: {erro}",
|
| 1348 |
+
"nuvem.login.pronto": "Pronto. Para usar a nuvem, escolha {modelo} no seletor de modelo da conversa. Ela nunca é escolhida sozinha.",
|
| 1349 |
+
"nuvem.login.nota": "O que sai do computador quando você usa um modelo da nuvem: o que você escreve e os prints que a IA olha. A conta gratuita tem limites de uso por sessão e por semana. Modelos locais não contam nesse limite.",
|
| 1350 |
+
"pu.chave.ou_chave": "Ou, com uma chave de API (Ollama, Groq ou outro endereço compatível com a OpenAI):",
|
| 1351 |
+
"pu.pronto.nuvem_conta": "Nuvem pela sua conta do Ollama (só quando você escolher o modelo)",
|
| 1352 |
+
"web.titulo": "Pesquisa na web (SearXNG)",
|
| 1353 |
+
"web.sub": "A IA pesquisa, lê os resultados e responde dentro do app. Usa um SearXNG (um buscador que roda no seu computador e consulta os buscadores públicos). Vem ligada; sem o SearXNG, a pesquisa abre no navegador.",
|
| 1354 |
+
"web.ligar": "Ligar a pesquisa na web",
|
| 1355 |
+
"web.endereco": "Endereço do SearXNG",
|
| 1356 |
+
"web.testar": "Testar",
|
| 1357 |
+
"web.ok": "O SearXNG respondeu ({n} resultados).",
|
| 1358 |
+
"web.erro": "Não respondeu: {erro}. Para instalar um aqui, rode opentars --searxng no terminal.",
|
| 1359 |
+
"web.salva_ligada": "Salvo: a pesquisa na web está ligada.",
|
| 1360 |
+
"web.salva_desligada": "Salvo: a pesquisa na web está desligada. Nada é enviado.",
|
| 1361 |
+
"web.nota": "O que sai: só o texto da pesquisa, que o SearXNG repassa aos buscadores (Google, Bing, DuckDuckGo...). Páginas lidas entram cortadas e como dado, nunca como instrução. O Gargantua não usa estas ferramentas (ele não foi treinado com elas): escolha outro modelo com ferramentas, como o qwen3:8b, para pesquisar.",
|
| 1362 |
+
"web.cli.intro": "Pesquisa na web do openTARS: um SearXNG só nesta máquina, em {endereco}.",
|
| 1363 |
+
"web.cli.sem_docker": "Não achei o Docker. Instale o SearXNG do jeito que preferir (https://docs.searxng.org), ligue o formato JSON e informe o endereço em Configurações > Nuvem.",
|
| 1364 |
+
"web.cli.config": "Configuração criada em {arquivo} (formato JSON ligado).",
|
| 1365 |
+
"web.cli.pergunta": "Rodar este comando agora? (s/N)",
|
| 1366 |
+
"web.cli.nada": "Nada foi feito.",
|
| 1367 |
+
"web.cli.nao_respondeu": "O SearXNG não respondeu em 60 segundos. Veja: docker logs opentars-searxng",
|
| 1368 |
+
"web.cli.pronto": "Pronto: o SearXNG está rodando e a pesquisa na web está ligada.",
|
| 1369 |
+
"avisos.titulo": "Avisos dos Probes",
|
| 1370 |
+
"avisos.limpar": "Limpar",
|
| 1371 |
+
"avisos.configurar": "Configurar Probes",
|
| 1372 |
+
"avisos.vazio": "Nenhum aviso por enquanto. Quando um Probe achar algo, aparece aqui e numa notificação.",
|
| 1373 |
+
"avisos.dica_bandeja": "openTARS Probes: {n} aviso(s) novo(s), {ligados} Probe(s) ligado(s)",
|
| 1374 |
+
"avisos.ver": "Ver avisos",
|
| 1375 |
+
"avisos.abrir_app": "Abrir o openTARS",
|
| 1376 |
+
"avisos.pausar": "Pausar todos os Probes",
|
| 1377 |
+
"avisos.sair": "Fechar até a próxima vez que eu entrar",
|
| 1378 |
+
"probes.r.arquivos": "{n} arquivo(s) novo(s): {nomes}",
|
| 1379 |
+
"probes.r.feed": "{n} novidade(s): {titulo}",
|
| 1380 |
+
"probes.r.git": "{n} commit(s) hoje. Último: {ultimo}",
|
| 1381 |
+
"probes.r.pagina_texto": "Apareceu na página: \"{texto}\"",
|
| 1382 |
+
"probes.r.pagina_mudou": "A página mudou.",
|
| 1383 |
+
"probes.r.sis_bateria": "Bateria em {n}%, e não está carregando.",
|
| 1384 |
+
"probes.r.sis_temperatura": "Processador a {n} °C.",
|
| 1385 |
+
"probes.r.sis_cpu": "Processador com {n}% de carga.",
|
| 1386 |
+
"probes.r.sis_internet": "A internet caiu.",
|
| 1387 |
+
"probes.r.sis_atualizacoes": "{n} atualização(ões) do sistema esperando.",
|
| 1388 |
+
"probes.r.prog_fechou": "{programa} fechou.",
|
| 1389 |
+
"probes.r.prog_abriu": "{programa} abriu.",
|
| 1390 |
+
"probes.r.prog_memoria": "{programa} está usando {n} MB de memória.",
|
| 1391 |
+
"probes.pp.q_pasta": "aparecer um arquivo novo com {o_que}",
|
| 1392 |
+
"probes.pp.q_pasta_tudo": "aparecer um arquivo novo",
|
| 1393 |
+
"probes.pp.n_pasta": "Novos em {pasta}",
|
| 1394 |
+
"probes.pp.q_web_texto": "aparecer \"{texto}\" na página",
|
| 1395 |
+
"probes.pp.q_web": "a página mudar",
|
| 1396 |
+
"probes.pp.n_web": "Página {site}",
|
| 1397 |
+
"probes.pp.q_feed": "sair uma novidade",
|
| 1398 |
+
"probes.pp.n_feed": "Novidades de {site}",
|
| 1399 |
+
"probes.pp.q_sis_bateria": "a bateria ficar abaixo de {n}%",
|
| 1400 |
+
"probes.pp.q_sis_temperatura": "o processador passar de {n} °C",
|
| 1401 |
+
"probes.pp.q_sis_cpu": "o processador passar de {n}% de carga",
|
| 1402 |
+
"probes.pp.q_sis_internet": "a internet cair",
|
| 1403 |
+
"probes.pp.q_sis_atualizacoes": "houver atualizações do sistema",
|
| 1404 |
+
"probes.pp.n_sis_bateria": "Bateria",
|
| 1405 |
+
"probes.pp.n_sis_temperatura": "Temperatura",
|
| 1406 |
+
"probes.pp.n_sis_cpu": "Processador",
|
| 1407 |
+
"probes.pp.n_sis_internet": "Internet",
|
| 1408 |
+
"probes.pp.n_sis_atualizacoes": "Atualizações",
|
| 1409 |
+
"probes.pp.q_prog_fechou": "o {programa} fechar",
|
| 1410 |
+
"probes.pp.q_prog_abriu": "o {programa} abrir",
|
| 1411 |
+
"probes.pp.q_prog_memoria": "o {programa} passar de {n} MB de memória",
|
| 1412 |
+
"probes.pp.n_programa": "Programa {programa}",
|
| 1413 |
+
"probes.pp.q_git": "houver commits no dia",
|
| 1414 |
+
"probes.pp.n_git": "Commits de {repo}",
|
| 1415 |
+
"probes.pp.nao_muda": "não muda, não apaga e não envia nada",
|
| 1416 |
+
"probes.estado_ligado": "Probes ligados · {n} vigiando",
|
| 1417 |
+
"probes.estado_ligado_sub": "Um ícone perto do relógio mostra quantos avisos você tem; clique nele para ver. Também liga sozinho quando você entra no computador.",
|
| 1418 |
+
"probes.estado_iniciando": "Ligando…",
|
| 1419 |
+
"probes.estado_iniciando_sub": "O serviço está subindo. Se ficar assim, abra o openTARS de novo.",
|
| 1420 |
+
"probes.estado_desligado": "Probes desligados",
|
| 1421 |
+
"probes.estado_desligado_sub": "Nada roda. Ao criar o primeiro Probe, eles ligam sozinhos, e você desliga aqui quando quiser.",
|
| 1422 |
+
"probes.ligar_servico": "Ligar os Probes",
|
| 1423 |
+
"probes.desligar_servico": "Desligar",
|
| 1424 |
+
"probes.passo1": "1 · O QUE VIGIAR?",
|
| 1425 |
+
"probes.passo2": "2 · OS DETALHES",
|
| 1426 |
+
"probes.tipo.pasta": "Uma pasta",
|
| 1427 |
+
"probes.tipo.pasta_ex": "Arquivo novo nos Downloads, um PDF que chegou",
|
| 1428 |
+
"probes.tipo.web": "Uma página da web",
|
| 1429 |
+
"probes.tipo.web_ex": "Um preço, uma vaga, um aviso que aparece",
|
| 1430 |
+
"probes.tipo.feed": "Notícias e lançamentos",
|
| 1431 |
+
"probes.tipo.feed_ex": "Feed RSS, canal do YouTube, versões no GitHub",
|
| 1432 |
+
"probes.tipo.sistema": "O computador",
|
| 1433 |
+
"probes.tipo.sistema_ex": "Bateria, temperatura, internet, atualizações",
|
| 1434 |
+
"probes.tipo.programa": "Um programa",
|
| 1435 |
+
"probes.tipo.programa_ex": "Fechou, abriu ou está pesado demais",
|
| 1436 |
+
"probes.tipo.git": "Um projeto git",
|
| 1437 |
+
"probes.tipo.git_ex": "Resumo dos commits no fim do dia",
|
| 1438 |
+
"probes.tipo.palavras": "Com as minhas palavras",
|
| 1439 |
+
"probes.tipo.palavras_ex": "Escreva a missão e o Gargantua monta o plano",
|
| 1440 |
+
"probes.f.pasta": "Qual pasta?",
|
| 1441 |
+
"probes.f.escolher": "Escolher…",
|
| 1442 |
+
"probes.f.filtro": "Só de algum tipo? (opcional)",
|
| 1443 |
+
"probes.f.filtro_ph": ".deb, .pdf, fatura",
|
| 1444 |
+
"probes.f.filtro_dica": "Extensões ou parte do nome, separados por vírgula. Vazio: qualquer arquivo novo.",
|
| 1445 |
+
"probes.f.url": "Endereço da página",
|
| 1446 |
+
"probes.f.texto": "Avisar quando aparecer este texto (opcional)",
|
| 1447 |
+
"probes.f.texto_ph": "Ex.: Em estoque",
|
| 1448 |
+
"probes.f.texto_dica": "Vazio: avisa quando qualquer coisa na página mudar.",
|
| 1449 |
+
"probes.f.frequencia": "Olhar a página",
|
| 1450 |
+
"probes.f.min15": "a cada 15 minutos",
|
| 1451 |
+
"probes.f.min60": "a cada hora",
|
| 1452 |
+
"probes.f.min360": "a cada 6 horas",
|
| 1453 |
+
"probes.f.min1440": "uma vez por dia",
|
| 1454 |
+
"probes.f.feed": "Endereço do feed, do canal ou do repositório",
|
| 1455 |
+
"probes.f.feed_dica": "Um repositório do GitHub vira o feed de versões novas; um canal do YouTube precisa do endereço youtube.com/channel/UC…; qualquer feed RSS ou Atom funciona.",
|
| 1456 |
+
"probes.f.condicao": "Avisar quando…",
|
| 1457 |
+
"probes.f.sis_bateria": "a bateria estiver baixa",
|
| 1458 |
+
"probes.f.sis_temperatura": "o processador esquentar",
|
| 1459 |
+
"probes.f.sis_cpu": "o processador ficar sobrecarregado",
|
| 1460 |
+
"probes.f.sis_internet": "a internet cair",
|
| 1461 |
+
"probes.f.sis_atualizacoes": "houver atualizações do sistema",
|
| 1462 |
+
"probes.f.limite": "Limite",
|
| 1463 |
+
"probes.f.programa": "Qual programa?",
|
| 1464 |
+
"probes.f.programa_ph": "steam, firefox, obs",
|
| 1465 |
+
"probes.f.programa_dica": "O nome do processo, como aparece no Monitor do Sistema.",
|
| 1466 |
+
"probes.f.evento": "Avisar quando ele…",
|
| 1467 |
+
"probes.f.prog_fechou": "fechar (ou travar e sumir)",
|
| 1468 |
+
"probes.f.prog_abriu": "abrir",
|
| 1469 |
+
"probes.f.prog_memoria": "usar memória demais",
|
| 1470 |
+
"probes.f.limite_mb": "Mais de",
|
| 1471 |
+
"probes.f.repo": "Pasta do projeto",
|
| 1472 |
+
"probes.f.hora": "Resumo todo dia às",
|
| 1473 |
+
"probes.f.missao": "A missão",
|
| 1474 |
+
"probes.nova_palavras": "O Gargantua transforma em um plano e você confere antes de criar. Precisa de um Gargantua instalado.",
|
| 1475 |
+
"probes.f.erro_pasta": "Escolha uma pasta que existe.",
|
| 1476 |
+
"probes.f.erro_url": "Escreva o endereço completo, começando com https://",
|
| 1477 |
+
"probes.f.erro_programa": "Escreva o nome do programa.",
|
| 1478 |
+
"probes.f.erro_repo": "Essa pasta não é um projeto git (não tem .git).",
|
| 1479 |
+
"probes.f.erro_hora": "Hora no formato 18:00.",
|
| 1480 |
+
"probes.frase": "Vai avisar quando <b>{quando}</b>. Olha {check}, avisa no máximo {n} vez(es) por dia e só lê: não muda, não apaga e não envia nada.",
|
| 1481 |
+
"probes.acoes_titulo": "Se quiser, ele também pode agir sobre o que achar:",
|
| 1482 |
+
"probes.criar_e_ligar": "Criar e ligar",
|
| 1483 |
+
"probes.criado_ligado": "\"{nome}\" criado e ligado.",
|
| 1484 |
+
"probes.servico_ligado_agora": "Os Probes estavam desligados e foram ligados: o ícone aparece perto do relógio.",
|
| 1485 |
+
"probes.precisa_modelo": "Este Probe usa o Gargantua: baixe o Gargantua Lite lá em cima para ele rodar.",
|
| 1486 |
+
"probes.seus": "SEUS PROBES",
|
| 1487 |
+
"probes.sem_ia": "regra fixa, sem IA",
|
| 1488 |
+
"probes.com_ia": "o Gargantua decide",
|
| 1489 |
+
"probes.ultima": "última olhada {quando}",
|
| 1490 |
+
"probes.pp.missao": "Avisa quando {quando}.",
|
| 1491 |
+
"avisos.dica_sino": "Avisos dos Probes: {n} novo(s)",
|
| 1492 |
+
"pu.ollama_antigo": "Este modelo pede um Ollama mais novo. Atualize com: curl -fsSL https://ollama.com/install.sh | sh (e tente de novo).",
|
| 1493 |
+
"cooper.descontinuado": "O Cooper foi descontinuado: o Gargantua 2 já enxerga a tela. Para instalar: {comando}",
|
| 1494 |
+
"cfg.gargantua_novo": "Você tem o Gargantua 1 ou o Lite. O Gargantua 2 é a IA principal do openTARS: 1,6 GB, acerta mais e enxerga a tela com mais precisão (o Gargantua 1 não enxerga). Vale baixar.",
|
| 1495 |
+
"cfg.baixar_gargantua2": "Baixar o Gargantua 2",
|
| 1496 |
+
"msg.busca_nao_lida": "A busca foi aberta no navegador, mas a IA não leu a página: o que ela respondeu acima vem da memória dela e pode estar desatualizado. Confira os resultados no navegador.",
|
| 1497 |
+
"msg.pouca_confianca": "Não tenho certeza dessa resposta: ela veio da memória do modelo e pode estar errada ou inventada. Confira numa fonte antes de usar.",
|
| 1498 |
+
"msg.verificando_fato": "Pouca confiança na resposta acima: vou conferir pela busca na web.",
|
| 1499 |
+
"msg.busca_nada_aberto": "Nada foi aberto no seu computador: a resposta veio do SearXNG. Se ela diz que abriu algo no navegador, isso não aconteceu.",
|
| 1500 |
+
"visao.ok": "{modelo} (olha a tela: acha botões e descreve janelas)",
|
| 1501 |
+
"visao.nao_instalado": "não instalado. Para o openTARS enxergar a tela, baixe o Gargantua 2: {comando}",
|
| 1502 |
+
"visao.desligado": "{modelo} está instalado, mas desligado (TARS_COOPER=0).",
|
| 1503 |
+
"visao.sem_resposta": "O modelo que olha a tela não respondeu ({motivo}).",
|
| 1504 |
+
"cfg.nav.modelos": "Mais modelos",
|
| 1505 |
+
"cfg.modelos.titulo": "Mais modelos",
|
| 1506 |
+
"cfg.modelos.sub": "Modelos que você adiciona com um clique. Eles baixam pelo Ollama, aparecem na lista de modelos quando terminam, e o openTARS pode usá-los como qualquer outro.",
|
| 1507 |
+
"pu.garg.nome_modelinhos": "Modelinhos de foto (tirar fundo, aumentar, selecionar e remover)",
|
| 1508 |
+
"modelinhos.baixando": "Baixando os modelinhos de foto (~300 MB): tirar o fundo, aumentar a resolução, selecionar por clique e remover um objeto.",
|
| 1509 |
+
"modelinhos.pronto": "Os modelinhos de foto estão prontos.",
|
| 1510 |
+
"modelinhos.erro": "Não consegui baixar os modelinhos de foto ({erro}). Tento de novo na próxima abertura.",
|
| 1511 |
+
"lite.baixando": "Baixando o Gargantua 2 Lite (0,6 GB), a IA que fica em segundo plano para o assistente, as ações de texto e os Probes.",
|
| 1512 |
+
"lite.pronto": "O Gargantua 2 Lite está pronto.",
|
| 1513 |
+
"lite.erro": "Não consegui baixar o Gargantua 2 Lite ({erro}). Tento de novo na próxima abertura.",
|
| 1514 |
+
"cfg.bonsai.sub": "Gera imagens a partir de uma frase (\"desenhe um farol ao entardecer\"). Da PrismML, Apache 2.0. Opcional: {tamanho} e uma placa NVIDIA com 6 GB (ou um Mac com Apple Silicon). Roda sem internet depois de instalado.",
|
| 1515 |
+
"cfg.bonsai.instalar": "Instalar ({tamanho})",
|
| 1516 |
+
"cfg.bonsai.remover": "Remover",
|
| 1517 |
+
"cfg.bonsai.nota": "Instala numa pasta do openTARS, sem senha de administrador. Antes de gerar, o openTARS tira os outros modelos da placa.",
|
| 1518 |
+
"cfg.bonsai.pronto": "Instalado. Peça no chat: \"desenhe uma raposa na neve\".",
|
| 1519 |
+
"cfg.bonsai.instalando": "Instalando (leva uns 10 minutos)… {linha}",
|
| 1520 |
+
"cfg.bonsai.erro": "A instalação falhou ({erro}). Os arquivos baixados ficaram; tentar de novo continua de onde parou.",
|
| 1521 |
+
"cfg.bonsai.nao_da.placa": "Precisa de uma placa NVIDIA com pelo menos 6 GB.",
|
| 1522 |
+
"cfg.bonsai.nao_da.apple_silicon": "Precisa de um Mac com Apple Silicon.",
|
| 1523 |
+
"cfg.bonsai.nao_da.disco": "Não há espaço livre suficiente no disco.",
|
| 1524 |
+
"cfg.bonsai.nao_da.falta": "Falta o programa {programa} no computador.",
|
| 1525 |
+
"cfg.modelos.g.opentars": "Modelos do openTARS",
|
| 1526 |
+
"cfg.modelos.g.opentars_sub": "Treinados por nós para usar o computador com as ferramentas do openTARS.",
|
| 1527 |
+
"cfg.modelos.destaque": "Recomendado",
|
| 1528 |
+
"cfg.modelos.bom_pra_ca": "Bom para este computador",
|
| 1529 |
+
"cfg.modelos.pesado": "Pesado para este computador: vai ficar lento ou pode nem caber.",
|
| 1530 |
+
"cfg.modelos.maquina": "Este computador: placa de vídeo {placa}, memória {ram}. Os marcados como bons para ele são os maiores de cada tipo que cabem bem.",
|
| 1531 |
+
"cfg.modelos.sem_placa": "nenhuma dedicada (só o processador)",
|
| 1532 |
+
"cfg.modelos.destaque_nota": "O que fica em segundo plano: o assistente, as ações de texto e os Probes. Leve, roda só no processador.",
|
| 1533 |
+
"cfg.modelos.g.bonsai": "Bonsai 2",
|
| 1534 |
+
"cfg.modelos.g.bonsai_sub": "Os modelos ternários da Prism ML: arquivos pequenos com visão, ferramentas e raciocínio, e contexto de 256 mil. Pedem um Ollama recente (0.40.6 ou mais novo).",
|
| 1535 |
+
"cfg.modelos.g.imagem": "Geração de imagem",
|
| 1536 |
+
"cfg.modelos.g.imagem_sub": "Modelos que desenham uma imagem a partir de um texto. O openTARS gera imagens com o Bonsai Image 4B (o primeiro, opcional): é só pedir no chat. Os do Ollama abaixo geram imagem no macOS; para Windows e Linux o anúncio dele dizia \"em breve\", então podem baixar aqui e mesmo assim não rodar. São grandes.",
|
| 1537 |
+
"cfg.modelos.baixar": "Baixar · {tamanho}",
|
| 1538 |
+
"cfg.modelos.instalado": "Instalado ✓",
|
| 1539 |
+
"cfg.modelos.cancelar": "Cancelar",
|
| 1540 |
+
"cfg.modelos.baixando": "{pct}% · {feito} de {total} · {resto}",
|
| 1541 |
+
"cfg.modelos.cancelado": "Download cancelado. Clique de novo para retomar de onde parou.",
|
| 1542 |
+
"cfg.modelos.sem_espaco": "Não há espaço livre no disco: precisa de cerca de {precisa} e há {livre} livres.",
|
| 1543 |
+
"cfg.modelos.cap.vision": "visão",
|
| 1544 |
+
"cfg.modelos.cap.tools": "ferramentas",
|
| 1545 |
+
"cfg.modelos.cap.thinking": "raciocínio",
|
| 1546 |
+
"cfg.modelos.cap.image": "geração de imagem",
|
| 1547 |
+
"cfg.modelos.cap.text": "texto",
|
| 1548 |
+
"cfg.modelos.g.geral": "Uso geral",
|
| 1549 |
+
"cfg.modelos.g.geral_sub": "Conversa, raciocínio e ferramentas. Os menores rodam em quase qualquer computador; do 14B para cima pedem uma placa de vídeo grande ou muita memória.",
|
| 1550 |
+
"cfg.modelos.g.visao": "Visão",
|
| 1551 |
+
"cfg.modelos.g.visao_sub": "Modelos que também entendem imagens que você anexa a uma mensagem.",
|
| 1552 |
+
"cfg.modelos.g.codigo": "Código",
|
| 1553 |
+
"cfg.modelos.g.codigo_sub": "Modelos feitos para escrever e consertar código.",
|
| 1554 |
+
"cfg.modelos.g.grandes": "Modelos grandes",
|
| 1555 |
+
"cfg.modelos.g.grandes_sub": "Pedem uma placa de vídeo grande ou muita memória: baixam normalmente, mas num computador menor ficam lentos ou não carregam.",
|
| 1556 |
+
"cfg.nav.gerenciar": "Gerenciar modelos",
|
| 1557 |
+
"cfg.gerenciar.titulo": "Gerenciar modelos",
|
| 1558 |
+
"cfg.gerenciar.sub": "O que está instalado no Ollama deste computador. Apague os que você não usa para liberar espaço, ou atualize um para a versão mais nova.",
|
| 1559 |
+
"cfg.gerenciar.instalados": "Modelos instalados",
|
| 1560 |
+
"cfg.gerenciar.resumo": "{n} modelos · {usado} em disco · {livre} livres",
|
| 1561 |
+
"cfg.gerenciar.vazio": "Nenhum modelo instalado ainda. Adicione alguns em Mais modelos.",
|
| 1562 |
+
"cfg.gerenciar.selo.oficial": "modelo oficial do openTARS",
|
| 1563 |
+
"cfg.gerenciar.selo.nuvem": "modelo de nuvem",
|
| 1564 |
+
"cfg.gerenciar.atualizar": "Atualizar",
|
| 1565 |
+
"cfg.gerenciar.apagar": "Apagar",
|
| 1566 |
+
"cfg.gerenciar.confirmar": "Sim, apagar",
|
| 1567 |
+
"cfg.gerenciar.manter": "Manter",
|
| 1568 |
+
"cfg.gerenciar.pergunta": "Apagar {nome}? Libera {tamanho}. Dá para baixar de novo depois.",
|
| 1569 |
+
"cfg.gerenciar.pergunta_oficial": "Este é um modelo oficial do openTARS: o assistente o usa para as ações. Apagar {nome} mesmo assim? Libera {tamanho}; dá para baixar de novo depois.",
|
| 1570 |
+
"cfg.gerenciar.erro": "Não deu pra apagar: {erro}",
|
| 1571 |
+
"cfg.gerenciar.atualizando": "Procurando uma versão mais nova…",
|
| 1572 |
+
"cfg.gerenciar.atualizado": "Atualizado.",
|
| 1573 |
+
"cfg.gerenciar.em_dia": "Já está na versão mais nova.",
|
| 1574 |
+
"modelo.novo": "Há uma versão nova de {nomes} no ollama.com. O Ollama não atualiza os modelos sozinho.",
|
| 1575 |
+
"prova.sem_modelo": "Nenhum Gargantua instalado. Use --model NOME para escolher o modelo da prova.",
|
| 1576 |
+
"prova.inicio": "Prova portátil do openTARS: {n} tarefas com {modelo} no {sistema}. Roda numa pasta temporária; sua pasta pessoal não é tocada.",
|
| 1577 |
+
"prova.tarefa": "[{marca}] {i}/{n} {id} ({s}s){motivo}",
|
| 1578 |
+
"diag.plataforma": "Plataforma",
|
| 1579 |
+
"diag.plataforma_falta": "ainda não existe neste sistema: {funcoes}",
|
| 1580 |
+
"acoes.fechar": "Fechar",
|
| 1581 |
+
"acoes.aba.reescrever": "Reescrever",
|
| 1582 |
+
"acoes.aba.resumir": "Resumir",
|
| 1583 |
+
"acoes.aba.traduzir": "Traduzir",
|
| 1584 |
+
"acoes.aba.perguntar": "Perguntar",
|
| 1585 |
+
"acoes.opcao.corrigir": "Corrigir",
|
| 1586 |
+
"acoes.opcao.formal": "Mais formal",
|
| 1587 |
+
"acoes.opcao.informal": "Mais simples",
|
| 1588 |
+
"acoes.opcao.para_en": "Para o inglês",
|
| 1589 |
+
"acoes.opcao.para_pt": "Para o português",
|
| 1590 |
+
"acoes.resultado.reescrever": "Texto reescrito",
|
| 1591 |
+
"acoes.resultado.resumir": "Resumo",
|
| 1592 |
+
"acoes.resultado.traduzir": "Tradução",
|
| 1593 |
+
"acoes.resultado.perguntar": "Resposta",
|
| 1594 |
+
"acoes.pergunta_dica": "Pergunte algo sobre o trecho",
|
| 1595 |
+
"acoes.enviar_pergunta": "Enviar pergunta",
|
| 1596 |
+
"acoes.substituir": "Substituir no texto",
|
| 1597 |
+
"acoes.copiar": "Copiar",
|
| 1598 |
+
"acoes.copiado": "Copiado",
|
| 1599 |
+
"acoes.descartar": "Descartar",
|
| 1600 |
+
"acoes.rodape": "Nada sai do seu computador. O texto selecionado é só material: o openTARS não executa nada do que estiver escrito nele. Atalho: {atalho}",
|
| 1601 |
+
"acoes.atalho_linux": "Ctrl+Alt+R",
|
| 1602 |
+
"acoes.atalho_windows": "Ctrl+Alt+R",
|
| 1603 |
+
"acoes.atalho_macos": "Ctrl+Option+R",
|
| 1604 |
+
"acoes.trecho": "Texto selecionado: \"{trecho}\"",
|
| 1605 |
+
"acoes.cortado": "(só os primeiros {n} caracteres entram)",
|
| 1606 |
+
"acoes.sem_texto": "Nenhum texto selecionado. Marque um trecho em qualquer programa e aperte o atalho de novo.",
|
| 1607 |
+
"acoes.pensando": "Pensando…",
|
| 1608 |
+
"acoes.modelo": "{modelo} · neste computador",
|
| 1609 |
+
"acoes.erro": "Não deu certo: {erro}",
|
| 1610 |
+
"acoes.vazio": "O modelo não devolveu nada. Tente outra opção.",
|
| 1611 |
+
"atalho.acoes_registrado": "Atalho das ações de texto: {atalho} abre o painel com o texto selecionado.",
|
| 1612 |
+
"atalho.acoes_como": "O atalho das ações de texto não está cadastrado. Para cadastrar ({atalho}): opentars --atalho-acoes on. Outra combinação: opentars --atalho-acoes ctrl+alt+g",
|
| 1613 |
+
"cfg.nav.assistente": "Assistente",
|
| 1614 |
+
"cfg.assist.titulo": "Assistente",
|
| 1615 |
+
"cfg.assist.sub": "A IA à mão em qualquer programa: selecione um texto, aperte o atalho e escolha o que fazer.",
|
| 1616 |
+
"cfg.assist.ligado_titulo": "Assistente ligado",
|
| 1617 |
+
"cfg.assist.ligado": "Deixar o modelo das ações de texto pronto quando eu usar",
|
| 1618 |
+
"cfg.assist.ligado_nota": "Ligado, o {modelo} faz as ações de texto e sai da memória sozinho 3 minutos depois do último uso: parado, a IA não ocupa memória nem placa. Desligado, ele descarrega na hora.",
|
| 1619 |
+
"cfg.assist.atalho_titulo": "Atalho global",
|
| 1620 |
+
"cfg.assist.atalho_sub": "Abre o painel das ações de texto com o que estiver selecionado em qualquer programa.",
|
| 1621 |
+
"cfg.assist.atalho_nenhum": "O atalho das ações de texto não está cadastrado.",
|
| 1622 |
+
"cfg.assist.atalho_cadastrar": "Cadastrar {atalho}",
|
| 1623 |
+
"cfg.assist.atalho_remover": "Remover o atalho",
|
| 1624 |
+
"cfg.assist.atalho_nota": "Se o atalho brigar com outro programa, escolha outro no terminal: opentars --atalho-acoes ctrl+alt+g (ou outra combinação).",
|
| 1625 |
+
"cfg.assist.sistema_titulo": "Iniciar com o sistema",
|
| 1626 |
+
"cfg.assist.sistema": "Abrir o openTARS escondido quando eu entrar no computador",
|
| 1627 |
+
"cfg.assist.sistema_nota": "Ligado por padrão: o atalho responde na hora desde o começo do dia e o ícone fica perto do relógio. Desmarque para o openTARS não abrir com o sistema.",
|
| 1628 |
+
"cfg.assist.acoes_titulo": "Ações de texto",
|
| 1629 |
+
"cfg.assist.acoes_sub": "Reescrever, resumir, traduzir e perguntar sobre o trecho. O texto selecionado é só material: nada do que está escrito nele é executado, e nada sai do seu computador.",
|
| 1630 |
+
"cfg.assist.acoes_modelo": "Modelo das ações: {modelo}.",
|
| 1631 |
+
"cfg.assist.erro": "Não deu certo: {erro}",
|
| 1632 |
+
"rot.tray_acoes": "Ações de texto com o que está selecionado",
|
| 1633 |
+
"rot.tray_assistente": "Assistente ligado",
|
| 1634 |
+
"atalho.acoes_windows": "No Windows, {atalho} abre as ações de texto enquanto o openTARS estiver aberto (o ícone perto do relógio). Para valer desde o começo do dia, ligue Iniciar com o sistema.",
|
| 1635 |
+
"atalho.acoes_macos": "No macOS, {atalho} abre as ações de texto enquanto o openTARS estiver aberto (o ícone na barra de menus). Para valer desde o começo do dia, ligue Iniciar com o sistema.",
|
| 1636 |
+
"desinst.dados": "Apagar também as suas conversas, configurações, memória e registros do openTARS ({pastas})?",
|
| 1637 |
+
"desinst.dados_ok": "Conversas, configurações e registros apagados.",
|
| 1638 |
+
"desinst.modelos": "Apagar também os modelos do openTARS no Ollama ({nomes})? Os outros modelos do Ollama ficam.",
|
| 1639 |
+
"desinst.deb": "Para tirar o programa (instalado pelo .deb), rode num terminal: sudo apt remove opentars",
|
| 1640 |
+
"desinst.windows": "O removedor abriu numa janela própria e termina sozinho depois que este openTARS fechar.",
|
| 1641 |
+
"pu.passo.sistema": "Permissões e atalho",
|
| 1642 |
+
"pu.sist.mac.titulo": "Deixe o openTARS enxergar e agir neste Mac",
|
| 1643 |
+
"pu.sist.mac.texto": "O macOS pede a sua autorização para cada coisa. Você concede em Ajustes do Sistema e pode tirar quando quiser. Nada disso envia dados para fora do Mac.",
|
| 1644 |
+
"pu.sist.acessibilidade": "Acessibilidade",
|
| 1645 |
+
"pu.sist.acessibilidade_desc": "Permite clicar, digitar, colar e ler o texto selecionado em outros programas por você.",
|
| 1646 |
+
"pu.sist.tela": "Gravação de Tela",
|
| 1647 |
+
"pu.sist.tela_desc": "Permite que o assistente veja a tela quando você pedir para achar um botão ou perguntar sobre ela.",
|
| 1648 |
+
"pu.sist.abrir_ajustes": "Abrir Ajustes",
|
| 1649 |
+
"pu.sist.concedida": "Concedida",
|
| 1650 |
+
"pu.sist.mac.nota": "Depois de conceder, volte aqui: a lista se atualiza sozinha. O macOS pode pedir para reabrir o openTARS uma vez. O atalho Control+Option+R não precisa de permissão, e o microfone o macOS pede quando você ligar a voz. Sem alguma permissão, só o recurso ligado a ela fica desligado.",
|
| 1651 |
+
"pu.sist.win.titulo": "O openTARS sempre à mão",
|
| 1652 |
+
"pu.sist.win.texto": "No Windows não há permissões a conceder. Duas escolhas e um aviso.",
|
| 1653 |
+
"pu.sist.atalho": "Atalho para as ações de texto: Ctrl+Alt+R",
|
| 1654 |
+
"pu.sist.atalho_desc": "Selecione um texto em qualquer programa e aperte o atalho. Funciona enquanto o openTARS estiver aberto (ou no ícone perto do relógio).",
|
| 1655 |
+
"pu.sist.inicio": "Iniciar com o Windows",
|
| 1656 |
+
"pu.sist.inicio_desc": "Deixa o openTARS no ícone perto do relógio desde o começo do dia. Ligado por padrão; você desliga aqui ou pelo ícone quando quiser.",
|
| 1657 |
+
"pu.sist.admin": "Um limite do Windows",
|
| 1658 |
+
"pu.sist.admin_desc": "O openTARS não consegue controlar programas abertos como administrador (por exemplo, alguns instaladores). Para esses, ele avisa e você faz o passo à mão.",
|
| 1659 |
+
"pu.sist.ligar": "Ligar",
|
| 1660 |
+
"pu.sist.ligado": "Ligado",
|
| 1661 |
+
"pu.sist.desligado": "Desligado",
|
| 1662 |
+
"rapido.cap.tarefa": "Fazer uma tarefa no computador",
|
| 1663 |
+
"rapido.cap.tarefa_desc": "Abrir, organizar, preencher. Eu faço, você aprova o que importa.",
|
| 1664 |
+
"rapido.cap.tela": "Perguntar sobre a tela",
|
| 1665 |
+
"rapido.cap.tela_desc": "\"O que é esse erro?\" \"Onde clico para exportar?\"",
|
| 1666 |
+
"rapido.cap.arquivo": "Buscar um arquivo",
|
| 1667 |
+
"rapido.cap.arquivo_desc": "\"O contrato de aluguel de 2024.\" Procura pelo nome e pelo texto de dentro.",
|
| 1668 |
+
"rot.tray_foto": "Editar uma foto…",
|
| 1669 |
+
"rapido.cap.foto": "Editar uma foto",
|
| 1670 |
+
"rapido.cap.foto_desc": "Cortar, clarear, tirar o fundo, aumentar ou remover um objeto. Sempre numa cópia.",
|
| 1671 |
+
"foto.escolher": "Escolha as fotos para editar",
|
| 1672 |
+
"foto.filtro": "Fotos ({ext})",
|
| 1673 |
+
"rapido.cap.web": "Pesquisar na web",
|
| 1674 |
+
"rapido.cap.web_desc": "Notícias, preços, horários: o que muda com o tempo.",
|
| 1675 |
+
"rapido.cap.lembrete": "Criar um lembrete",
|
| 1676 |
+
"rapido.cap.lembrete_desc": "\"Toda sexta às 17h me lembre de enviar o relatório.\"",
|
| 1677 |
+
"rapido.pref.tela": "Olhe a minha tela: ",
|
| 1678 |
+
"rapido.pref.web": "Pesquise na web: ",
|
| 1679 |
+
"rapido.pref.lembrete": "Me lembre de ",
|
| 1680 |
+
"busca.dica": "Que arquivo você procura? Ex.: o contrato de aluguel de 2024",
|
| 1681 |
+
"busca.procurando": "Procurando nas suas pastas…",
|
| 1682 |
+
"busca.nada": "Não achei nenhum arquivo com essas palavras no nome nem no texto.",
|
| 1683 |
+
"busca.achados": "{n} resultado(s): procurei pelo nome e pelo texto dentro dos documentos.",
|
| 1684 |
+
"busca.abrir": "Abrir",
|
| 1685 |
+
"busca.pasta": "Mostrar na pasta",
|
| 1686 |
+
"busca.sem_texto": "só imagem, não consegui ler o texto",
|
| 1687 |
+
"busca.nota": "A busca roda neste computador e só lê: não move nem apaga nada.",
|
| 1688 |
+
"arq.titulo": "{n} arquivo(s) selecionado(s)",
|
| 1689 |
+
"arq.acao.resumir": "Resumir",
|
| 1690 |
+
"arq.acao.renomear": "Renomear pelo conteúdo",
|
| 1691 |
+
"arq.acao.mover": "Mover para uma pasta",
|
| 1692 |
+
"arq.acao.lixeira": "Enviar para a lixeira",
|
| 1693 |
+
"arq.previa.renomear": "Como ficaria (nada mudou ainda)",
|
| 1694 |
+
"arq.previa.resumir": "O resumo de cada arquivo",
|
| 1695 |
+
"arq.previa.mover": "Estes arquivos vão para a pasta que você escolher",
|
| 1696 |
+
"arq.previa.lixeira": "Estes arquivos vão para a lixeira",
|
| 1697 |
+
"arq.pensando": "Lendo os arquivos…",
|
| 1698 |
+
"arq.novo_nome": "Novo nome de {nome}",
|
| 1699 |
+
"arq.renomear_n": "Renomear {n}",
|
| 1700 |
+
"arq.resumir": "Resumir",
|
| 1701 |
+
"arq.escolher_pasta": "Escolher a pasta…",
|
| 1702 |
+
"arq.lixeira_n": "Sim, mandar {n} para a lixeira",
|
| 1703 |
+
"arq.aviso_renomear": "Li só o texto dos arquivos para sugerir os nomes. Confira e edite antes de aplicar.",
|
| 1704 |
+
"arq.aviso_resumir": "Resumo os {n} primeiros arquivos que têm texto.",
|
| 1705 |
+
"arq.aviso_mover": "Nada é sobrescrito: um arquivo com o mesmo nome na pasta escolhida fica de fora.",
|
| 1706 |
+
"arq.aviso_lixeira": "Vão para a lixeira, não são apagados de vez: dá para recuperar.",
|
| 1707 |
+
"arq.sem_texto": "Sem texto que eu consiga ler (um PDF que é só imagem, por exemplo): o nome fica como está.",
|
| 1708 |
+
"arq.feito_renomear": "{n} renomeado(s).",
|
| 1709 |
+
"arq.feito_mover": "{n} movido(s) para {pasta}.",
|
| 1710 |
+
"arq.pulados": "{n} ficaram de fora (já havia um arquivo com o mesmo nome).",
|
| 1711 |
+
"arq.feito_lixeira": "{n} enviado(s) para a lixeira.",
|
| 1712 |
+
"arq.desfazer": "Desfazer",
|
| 1713 |
+
"arq.desfeito": "Desfeito: os arquivos voltaram como estavam.",
|
| 1714 |
+
"arq.cancelar": "Fechar",
|
| 1715 |
+
"arq.rodape": "Nada muda sem o seu clique. Renomear e mover dá para desfazer enquanto este painel está aberto.",
|
| 1716 |
+
"ctx.titulo": "Sugestão do openTARS",
|
| 1717 |
+
"ctx.email": "Você está escrevendo um e-mail. Quer que eu revise a ortografia antes de enviar? Selecione o texto e clique em Revisar.",
|
| 1718 |
+
"ctx.revisar": "Revisar",
|
| 1719 |
+
"ctx.agora_nao": "Agora não",
|
| 1720 |
+
"ctx.parar": "Parar de sugerir neste programa",
|
| 1721 |
+
"ctx.nota": "Só olho o nome do programa em uso e o título da janela. Nada é gravado nem enviado. Desligue em Configurações > Assistente.",
|
| 1722 |
+
"ctx.selecione": "Selecione o texto que quer revisar e clique em Revisar de novo (ou use o atalho das ações de texto).",
|
| 1723 |
+
"cfg.assist.ctx_titulo": "Sugestões pelo programa em uso",
|
| 1724 |
+
"cfg.assist.ctx": "Sugerir ajuda conforme o programa em uso (por exemplo, revisar um e-mail)",
|
| 1725 |
+
"ctx.nota_config": "Ligado por padrão. O openTARS olha a cada 4 segundos só o nome do programa e o título da janela em uso, sem gravar nem enviar nada, e sugere uma vez por janela.",
|
| 1726 |
+
"arq.acao.foto": "Editar a foto",
|
| 1727 |
+
"arq.titulo_fotos": "{n} foto(s) selecionada(s)",
|
| 1728 |
+
"arq.previa.foto": "Como ficaria (a original não muda)",
|
| 1729 |
+
"arq.sem_modelo": "sem modelo: na hora",
|
| 1730 |
+
"arq.neste_computador": "neste computador",
|
| 1731 |
+
"foto.dica": "O que fazer com a foto? Ex.: corta em quadrado e deixa mais clara",
|
| 1732 |
+
"foto.sufixo": "editada",
|
| 1733 |
+
"foto.chip.quadrado": "Quadrado",
|
| 1734 |
+
"foto.chip.clara": "Mais clara",
|
| 1735 |
+
"foto.chip.girar": "Girar",
|
| 1736 |
+
"foto.chip.cinza": "Preto e branco",
|
| 1737 |
+
"foto.chip.email": "Reduzir para e-mail",
|
| 1738 |
+
"foto.frase.quadrado": "quadrado",
|
| 1739 |
+
"foto.frase.clara": "mais clara",
|
| 1740 |
+
"foto.frase.girar": "girar",
|
| 1741 |
+
"foto.frase.cinza": "preto e branco",
|
| 1742 |
+
"foto.frase.email": "reduzir para e-mail",
|
| 1743 |
+
"foto.chip.sem_fundo": "Tirar o fundo",
|
| 1744 |
+
"foto.chip.aumentar": "Aumentar a resolução",
|
| 1745 |
+
"foto.chip.remover": "Remover um objeto",
|
| 1746 |
+
"foto.frase.sem_fundo": "tirar o fundo",
|
| 1747 |
+
"foto.frase.aumentar": "aumentar a resolução",
|
| 1748 |
+
"foto.clique_no_objeto": "Clique no objeto que deve sair, na foto da esquerda.",
|
| 1749 |
+
"foto.chat_feito": "Pronto: {o_que}. A original não mudou; a cópia está ao lado dela: {nomes}.",
|
| 1750 |
+
"foto.chat_erro": "Não consegui editar: {erros}",
|
| 1751 |
+
"imagem.nao_instalado": "Para gerar imagens eu uso o Bonsai Image 4B, que é opcional (cerca de 9,5 GB e uma placa NVIDIA com 6 GB, ou um Mac com Apple Silicon). Instale em Configurações > Mais modelos > Bonsai Image 4B e me peça de novo.",
|
| 1752 |
+
"imagem.gerando": "Gerando a imagem: {o_que} (a primeira imagem leva cerca de 1 minuto, para carregar o modelo; as seguintes, segundos)",
|
| 1753 |
+
"imagem.pronta": "Pronto. Salvei em {pasta}: {arquivo}.",
|
| 1754 |
+
"imagem.sem_memoria": "A placa de vídeo está com só {livre} MB livres e o Bonsai precisa de uns 5 GB. Feche jogos ou programas que usam a placa e me peça de novo.",
|
| 1755 |
+
"imagem.erro": "Não consegui gerar a imagem ({erro}).",
|
| 1756 |
+
"foto.modelinhos_faltando": "Os modelinhos de foto ainda estão baixando. Tente de novo em alguns minutos.",
|
| 1757 |
+
"foto.antes": "Antes · {w} x {h}",
|
| 1758 |
+
"foto.depois": "Depois · {w} x {h}",
|
| 1759 |
+
"foto.entendi": "Entendi: {o_que}.",
|
| 1760 |
+
"foto.o_que_fazer": "Escreva o que fazer e aperte Enter, ou use um dos atalhos acima.",
|
| 1761 |
+
"foto.nao_entendi": "Não entendi o que fazer. Dá para pedir: quadrado, 16:9, mais clara ou mais escura, contraste, girar, espelhar, preto e branco, reduzir e salvar em png, jpg ou webp.",
|
| 1762 |
+
"foto.nao_abre": "Não consegui abrir esta imagem.",
|
| 1763 |
+
"foto.salvar": "Salvar cópia: {nome}",
|
| 1764 |
+
"foto.salvar_n": "Salvar {n} cópias",
|
| 1765 |
+
"foto.aviso": "Sempre uma cópia na mesma pasta: a original fica como está. A cópia sai sem os dados de localização e do aparelho. Cortar, girar e clarear são na hora; tirar o fundo, aumentar e remover um objeto usam modelinhos neste computador e levam alguns segundos.",
|
| 1766 |
+
"foto.salvas": "Cópia salva: {nomes}."
|
| 1767 |
+
}
|
app/logo.svg
ADDED
|
|
app/modelos/murph.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
app/murph/LEIA-ME.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Murph: treino
|
| 2 |
+
|
| 3 |
+
A Murph é a ajudante local que decide o tipo de cada pedido (visão, código,
|
| 4 |
+
Linux, ação, busca, conversa simples, geral). O modelo pronto fica em
|
| 5 |
+
`modelos/murph.json` e roda com `tars_murph.py`, em Python puro.
|
| 6 |
+
|
| 7 |
+
Esta pasta é só pra treinar de novo. Não vai no pacote `.deb`.
|
| 8 |
+
|
| 9 |
+
| Arquivo | O que é |
|
| 10 |
+
|---|---|
|
| 11 |
+
| `gerado/*.json` | frases novas escritas por um modelo grande, por idioma (quem escreveu não viu as frases de teste) |
|
| 12 |
+
| `limpar.py` | junta as geradas, tira repetidas e as parecidas com qualquer frase de teste, em qualquer idioma -> `gerado_limpo.json` |
|
| 13 |
+
| `filtro_traducoes_teste.json` | as frases de `tests/frases_classificador.py` traduzidas nos 5 idiomas, SÓ pro filtro achar traduções |
|
| 14 |
+
| `treinar_murph.py` | treina (exemplos do openTARS + `gerado_limpo.json`), calibra a confiança e salva `modelos/murph.json` |
|
| 15 |
+
| `comparar.py` | Murph x classificador antigo nas frases de teste (sozinhos e no modo AUTO) |
|
| 16 |
+
| `teste_cego.json` / `teste_cego.py` | 280 pedidos bagunçados escritos por quem não viu nada do projeto; o script tira os parecidos com o treino e compara |
|
| 17 |
+
| `dados.py` | onde ficam o treino e o teste |
|
| 18 |
+
|
| 19 |
+
Pra treinar de novo (precisa de `pip install scikit-learn numpy`):
|
| 20 |
+
|
| 21 |
+
```bash
|
| 22 |
+
python3 murph/limpar.py
|
| 23 |
+
python3 murph/treinar_murph.py
|
| 24 |
+
python3 murph/comparar.py
|
| 25 |
+
python3 murph/teste_cego.py
|
| 26 |
+
python3 tests/test_murph.py
|
| 27 |
+
```
|
| 28 |
+
|
| 29 |
+
As frases de teste (`idiomas/*.json` "avaliacao" e `tests/frases_classificador.py`)
|
| 30 |
+
nunca entram no treino. Pra corrigir um erro, escreva frases NOVAS parecidas com o
|
| 31 |
+
pedido real que errou, não copie a frase de teste.
|
| 32 |
+
|
| 33 |
+
## Resultado da 3.0.4
|
| 34 |
+
|
| 35 |
+
| | NB antigo | Murph |
|
| 36 |
+
|---|---|---|
|
| 37 |
+
| Teste cego, sozinho (140) | 84,3% | 92,9% |
|
| 38 |
+
| Teste cego, modo AUTO sem Ollama | 87,9% | 95,0% |
|
| 39 |
+
| Teste cego, AUTO com ajudante perfeito | 91,4% (34 chamadas) | 98,6% (20 chamadas) |
|
| 40 |
+
| Avaliação de sempre, sozinho (261) | 88,1% | 95,0% |
|
| 41 |
+
| Avaliação de sempre, AUTO sem Ollama | 92,0% | 95,4% |
|
| 42 |
+
|
| 43 |
+
O teste cego vale mais: foi rodado uma vez só, com o modelo já pronto. As
|
| 44 |
+
261 frases de sempre foram vistas durante o desenvolvimento.
|
app/murph/comparar.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Murph x classificador atual, em frases que NENHUM dos dois viu no treino
|
| 2 |
+
AVISO (4.0 Endurance Neo): este script de desenvolvimento usa o tars_classificador.py
|
| 3 |
+
(Naive Bayes), que saiu do openTARS. Pra rodar, pegue esse arquivo da 4.0 Endurance.
|
| 4 |
+
(idiomas/*.json "avaliacao" + tests/frases_classificador.py).
|
| 5 |
+
|
| 6 |
+
python3 murph/comparar.py
|
| 7 |
+
|
| 8 |
+
Mede, sem Ollama:
|
| 9 |
+
1. cada classificador sozinho (NB atual, NB com os dados novos, Murph);
|
| 10 |
+
2. o modo AUTO inteiro (palavras-chave + estrutura + classificador);
|
| 11 |
+
3. o AUTO com um ajudante PERFEITO (acerta sempre que é chamado): o
|
| 12 |
+
máximo que o sistema conseguiria com o qwen2.5:0.5b, e quantas vezes
|
| 13 |
+
ele precisaria ser chamado (cada chamada: 150–500 ms).
|
| 14 |
+
"""
|
| 15 |
+
import json
|
| 16 |
+
import os
|
| 17 |
+
import subprocess
|
| 18 |
+
import sys
|
| 19 |
+
import tempfile
|
| 20 |
+
|
| 21 |
+
AQUI = os.path.dirname(os.path.abspath(__file__))
|
| 22 |
+
sys.path.insert(0, AQUI)
|
| 23 |
+
from dados import teste, RAIZ # noqa: E402
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def sozinhos():
|
| 27 |
+
sys.path.insert(0, RAIZ)
|
| 28 |
+
import tars_classificador as nbm
|
| 29 |
+
import tars_murph as mm
|
| 30 |
+
murph = mm.Murph.carregar(mm.CAMINHO_PADRAO)
|
| 31 |
+
ger = [(f, c) for f, c, _ in json.load(open(os.path.join(AQUI, "gerado_limpo.json"), encoding="utf-8"))]
|
| 32 |
+
nb_atual = nbm.Modelo(nbm.amostras_padrao())
|
| 33 |
+
nb_mais = nbm.Modelo(nbm.amostras_padrao(ger))
|
| 34 |
+
av, ex = teste()
|
| 35 |
+
for nome, fn in (("NB atual", lambda f: nb_atual.classificar(f)[0]),
|
| 36 |
+
("NB + dados novos", lambda f: nb_mais.classificar(f)[0]),
|
| 37 |
+
("Murph", lambda f: murph.classificar(f)[0])):
|
| 38 |
+
ok = sum(fn(f) == c for f, c, _ in av + ex)
|
| 39 |
+
print(f" {nome:<18} {ok}/{len(av + ex)} = {100 * ok / len(av + ex):.1f}%")
|
| 40 |
+
print("\n Erros da Murph sozinha:")
|
| 41 |
+
for f, c, i in av + ex:
|
| 42 |
+
r, p = murph.classificar(f)
|
| 43 |
+
if r != c:
|
| 44 |
+
print(f" [{i}] {f} | esperado {c} | murph {r} ({p:.2f})")
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
def modo_auto(ajudante_perfeito):
|
| 48 |
+
"""Roda num processo separado (TARS_MURPH vale no carregamento)."""
|
| 49 |
+
os.environ.setdefault("XDG_CONFIG_HOME", tempfile.mkdtemp())
|
| 50 |
+
sys.path.insert(0, os.path.join(RAIZ, "tests"))
|
| 51 |
+
sys.path.insert(0, RAIZ)
|
| 52 |
+
import _util # noqa: F401
|
| 53 |
+
import tars
|
| 54 |
+
av, ex = teste()
|
| 55 |
+
gabarito = {f: c for f, c, _ in av + ex}
|
| 56 |
+
chamadas = []
|
| 57 |
+
tars.ollama_online = lambda: False
|
| 58 |
+
tars.modelo_embedding = lambda *a, **k: None
|
| 59 |
+
if ajudante_perfeito:
|
| 60 |
+
tars.listar_modelos_instalados = lambda forcar=False: {tars.MODELO_AJUDANTE}
|
| 61 |
+
tars.saude_ajudante.confiavel = lambda *a, **k: True
|
| 62 |
+
|
| 63 |
+
def ajudante(texto, finalistas=None, anterior=None, pistas=None):
|
| 64 |
+
chamadas.append(texto)
|
| 65 |
+
return gabarito[texto] if not finalistas or gabarito[texto] in finalistas else finalistas[0]
|
| 66 |
+
else:
|
| 67 |
+
tars.listar_modelos_instalados = lambda forcar=False: set()
|
| 68 |
+
|
| 69 |
+
def ajudante(texto, finalistas=None, anterior=None, pistas=None):
|
| 70 |
+
chamadas.append(texto)
|
| 71 |
+
return None
|
| 72 |
+
tars._classificar_com_ia = ajudante
|
| 73 |
+
ok = sum(tars.decidir_tarefa(f).categoria == c for f, c, _ in av + ex)
|
| 74 |
+
quem = "Murph" if tars.murph.disponivel() else "NB atual"
|
| 75 |
+
extra = f" · chamaria o ajudante {len(chamadas)}x" if ajudante_perfeito else ""
|
| 76 |
+
print(f" {quem:<9} {ok}/{len(av + ex)} = {100 * ok / len(av + ex):.1f}%{extra}")
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
if __name__ == "__main__":
|
| 80 |
+
if len(sys.argv) > 1 and sys.argv[1] == "--auto":
|
| 81 |
+
modo_auto(sys.argv[2] == "perfeito")
|
| 82 |
+
sys.exit(0)
|
| 83 |
+
print("1. Classificador sozinho")
|
| 84 |
+
sozinhos()
|
| 85 |
+
for titulo, arg in (("2. Modo AUTO sem Ollama", "sem"), ("3. Modo AUTO com ajudante perfeito", "perfeito")):
|
| 86 |
+
print(f"\n{titulo}")
|
| 87 |
+
for murph_ligada in ("off", "on"):
|
| 88 |
+
env = dict(os.environ, TARS_MURPH="off" if murph_ligada == "off" else "")
|
| 89 |
+
subprocess.run([sys.executable, __file__, "--auto", arg], env=env, check=True)
|
app/murph/dados.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Dados da Murph ajudante: treino = exemplos do openTARS; teste = frases
|
| 2 |
+
que o openTARS guarda SEPARADAS pra avaliação (nenhum classificador treina nelas)."""
|
| 3 |
+
import json, os, sys
|
| 4 |
+
RAIZ = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 5 |
+
sys.path.insert(0, RAIZ); sys.path.insert(0, os.path.join(RAIZ, "tests")); sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 6 |
+
from tars_exemplos import EXEMPLOS
|
| 7 |
+
from frases_classificador import FRASES
|
| 8 |
+
|
| 9 |
+
TAREFAS = ["visao", "codigo", "tecnico", "acao", "busca", "simples", "geral"]
|
| 10 |
+
IDIOMAS = ["pt_BR", "en", "es", "fr", "de"]
|
| 11 |
+
|
| 12 |
+
def treino():
|
| 13 |
+
return [(f, cat) for cat, lista in EXEMPLOS.items() for f in lista]
|
| 14 |
+
|
| 15 |
+
def teste():
|
| 16 |
+
avaliacao = []
|
| 17 |
+
# 4.0: es/fr/de saíram da interface; as frases de avaliação deles ficam em tests/
|
| 18 |
+
outros = json.load(open(os.path.join(RAIZ, "tests", "avaliacao_outros_idiomas.json"), encoding="utf-8"))
|
| 19 |
+
for idioma in IDIOMAS:
|
| 20 |
+
arquivo = os.path.join(RAIZ, "idiomas", f"{idioma}.json")
|
| 21 |
+
pares = json.load(open(arquivo, encoding="utf-8"))["avaliacao"] if os.path.exists(arquivo) else outros[idioma]
|
| 22 |
+
avaliacao += [(f, c, idioma) for f, c in pares]
|
| 23 |
+
extra = [(f, c, "misto") for f, c in FRASES]
|
| 24 |
+
return avaliacao, extra
|
app/murph/filtro_traducoes_teste.json
ADDED
|
@@ -0,0 +1,776 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"original": "o que está escrito nesse pop-up que abriu",
|
| 4 |
+
"rotulo": "visao",
|
| 5 |
+
"pt_BR": "o que está escrito nesse pop-up que abriu",
|
| 6 |
+
"en": "what does this pop-up that opened say",
|
| 7 |
+
"es": "¿qué dice esta ventana emergente que se abrió?",
|
| 8 |
+
"fr": "qu'est-ce qui est écrit dans cette fenêtre pop-up qui s'est ouverte",
|
| 9 |
+
"de": "was steht in diesem Pop-up, das aufgegangen ist"
|
| 10 |
+
},
|
| 11 |
+
{
|
| 12 |
+
"original": "clica no x vermelho pra fechar esse aviso",
|
| 13 |
+
"rotulo": "visao",
|
| 14 |
+
"pt_BR": "clica no x vermelho pra fechar esse aviso",
|
| 15 |
+
"en": "click the red x to close this notice",
|
| 16 |
+
"es": "haz clic en la x roja para cerrar este aviso",
|
| 17 |
+
"fr": "clique sur le x rouge pour fermer cet avertissement",
|
| 18 |
+
"de": "klick auf das rote X, um diesen Hinweis zu schließen"
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"original": "me diz de que cor é o botão de enviar",
|
| 22 |
+
"rotulo": "visao",
|
| 23 |
+
"pt_BR": "me diz de que cor é o botão de enviar",
|
| 24 |
+
"en": "tell me what color the send button is",
|
| 25 |
+
"es": "dime de qué color es el botón de enviar",
|
| 26 |
+
"fr": "dis-moi de quelle couleur est le bouton envoyer",
|
| 27 |
+
"de": "sag mir, welche Farbe der Senden-Button hat"
|
| 28 |
+
},
|
| 29 |
+
{
|
| 30 |
+
"original": "tem alguma mensagem de erro aparecendo aí?",
|
| 31 |
+
"rotulo": "visao",
|
| 32 |
+
"pt_BR": "tem alguma mensagem de erro aparecendo aí?",
|
| 33 |
+
"en": "is there any error message showing?",
|
| 34 |
+
"es": "¿aparece algún mensaje de error ahí?",
|
| 35 |
+
"fr": "il y a un message d'erreur qui s'affiche ?",
|
| 36 |
+
"de": "wird da irgendeine Fehlermeldung angezeigt?"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"original": "aperta o botão de play do vídeo",
|
| 40 |
+
"rotulo": "visao",
|
| 41 |
+
"pt_BR": "aperta o botão de play do vídeo",
|
| 42 |
+
"en": "press the video's play button",
|
| 43 |
+
"es": "pulsa el botón de reproducir del vídeo",
|
| 44 |
+
"fr": "appuie sur le bouton lecture de la vidéo",
|
| 45 |
+
"de": "drück den Play-Button des Videos"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"original": "que programa é esse aberto na frente",
|
| 49 |
+
"rotulo": "visao",
|
| 50 |
+
"pt_BR": "que programa é esse aberto na frente",
|
| 51 |
+
"en": "what program is that open in front",
|
| 52 |
+
"es": "¿qué programa es ese que está abierto delante?",
|
| 53 |
+
"fr": "quel est ce programme ouvert au premier plan",
|
| 54 |
+
"de": "was ist das für ein Programm, das vorne offen ist"
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"original": "move o mouse pro canto de baixo da tela",
|
| 58 |
+
"rotulo": "visao",
|
| 59 |
+
"pt_BR": "move o mouse pro canto de baixo da tela",
|
| 60 |
+
"en": "move the mouse to the bottom corner of the screen",
|
| 61 |
+
"es": "mueve el ratón a la esquina inferior de la pantalla",
|
| 62 |
+
"fr": "déplace la souris dans le coin inférieur de l'écran",
|
| 63 |
+
"de": "beweg die Maus in die untere Ecke des Bildschirms"
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"original": "what's showing in the notification area",
|
| 67 |
+
"rotulo": "visao",
|
| 68 |
+
"pt_BR": "o que está aparecendo na área de notificações",
|
| 69 |
+
"en": "what's showing in the notification area",
|
| 70 |
+
"es": "¿qué aparece en el área de notificaciones?",
|
| 71 |
+
"fr": "qu'est-ce qui s'affiche dans la zone de notification",
|
| 72 |
+
"de": "was wird im Benachrichtigungsbereich angezeigt"
|
| 73 |
+
},
|
| 74 |
+
{
|
| 75 |
+
"original": "hit the blue button on the left side",
|
| 76 |
+
"rotulo": "visao",
|
| 77 |
+
"pt_BR": "aperta o botão azul do lado esquerdo",
|
| 78 |
+
"en": "hit the blue button on the left side",
|
| 79 |
+
"es": "pulsa el botón azul del lado izquierdo",
|
| 80 |
+
"fr": "appuie sur le bouton bleu à gauche",
|
| 81 |
+
"de": "drück den blauen Knopf auf der linken Seite"
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"original": "can you see what this dialog wants from me",
|
| 85 |
+
"rotulo": "visao",
|
| 86 |
+
"pt_BR": "você consegue ver o que essa caixa de diálogo quer de mim",
|
| 87 |
+
"en": "can you see what this dialog wants from me",
|
| 88 |
+
"es": "¿puedes ver qué quiere de mí este cuadro de diálogo?",
|
| 89 |
+
"fr": "tu peux voir ce que cette boîte de dialogue attend de moi",
|
| 90 |
+
"de": "kannst du sehen, was dieser Dialog von mir will"
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"original": "¿qué dice el mensaje que aparece en la pantalla?",
|
| 94 |
+
"rotulo": "visao",
|
| 95 |
+
"pt_BR": "o que diz a mensagem que aparece na tela?",
|
| 96 |
+
"en": "what does the message on the screen say?",
|
| 97 |
+
"es": "¿qué dice el mensaje que aparece en la pantalla?",
|
| 98 |
+
"fr": "que dit le message qui apparaît à l'écran ?",
|
| 99 |
+
"de": "was steht in der Meldung, die auf dem Bildschirm erscheint?"
|
| 100 |
+
},
|
| 101 |
+
{
|
| 102 |
+
"original": "clique sur l'icône de la roue dentée",
|
| 103 |
+
"rotulo": "visao",
|
| 104 |
+
"pt_BR": "clica no ícone da engrenagem",
|
| 105 |
+
"en": "click the gear icon",
|
| 106 |
+
"es": "haz clic en el icono del engranaje",
|
| 107 |
+
"fr": "clique sur l'icône de la roue dentée",
|
| 108 |
+
"de": "klick auf das Zahnrad-Symbol"
|
| 109 |
+
},
|
| 110 |
+
{
|
| 111 |
+
"original": "faz uma função em python que calcula fatorial",
|
| 112 |
+
"rotulo": "codigo",
|
| 113 |
+
"pt_BR": "faz uma função em python que calcula fatorial",
|
| 114 |
+
"en": "write a python function that calculates factorial",
|
| 115 |
+
"es": "haz una función en python que calcule el factorial",
|
| 116 |
+
"fr": "écris une fonction en python qui calcule la factorielle",
|
| 117 |
+
"de": "schreib eine Funktion in Python, die die Fakultät berechnet"
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"original": "meu javascript dá undefined quando chamo a função",
|
| 121 |
+
"rotulo": "codigo",
|
| 122 |
+
"pt_BR": "meu javascript dá undefined quando chamo a função",
|
| 123 |
+
"en": "my javascript returns undefined when I call the function",
|
| 124 |
+
"es": "mi javascript da undefined cuando llamo a la función",
|
| 125 |
+
"fr": "mon javascript renvoie undefined quand j'appelle la fonction",
|
| 126 |
+
"de": "mein JavaScript gibt undefined zurück, wenn ich die Funktion aufrufe"
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"original": "como declaro uma lista em kotlin",
|
| 130 |
+
"rotulo": "codigo",
|
| 131 |
+
"pt_BR": "como declaro uma lista em kotlin",
|
| 132 |
+
"en": "how do I declare a list in kotlin",
|
| 133 |
+
"es": "¿cómo declaro una lista en kotlin?",
|
| 134 |
+
"fr": "comment déclarer une liste en kotlin",
|
| 135 |
+
"de": "wie deklariere ich eine Liste in Kotlin"
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"original": "escreve um código que baixa uma página e salva o html",
|
| 139 |
+
"rotulo": "codigo",
|
| 140 |
+
"pt_BR": "escreve um código que baixa uma página e salva o html",
|
| 141 |
+
"en": "write code that downloads a page and saves the html",
|
| 142 |
+
"es": "escribe un código que descargue una página y guarde el html",
|
| 143 |
+
"fr": "écris un code qui télécharge une page et enregistre le html",
|
| 144 |
+
"de": "schreib Code, der eine Seite herunterlädt und das HTML speichert"
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"original": "o que é recursão em programação",
|
| 148 |
+
"rotulo": "codigo",
|
| 149 |
+
"pt_BR": "o que é recursão em programação",
|
| 150 |
+
"en": "what is recursion in programming",
|
| 151 |
+
"es": "¿qué es la recursión en programación?",
|
| 152 |
+
"fr": "qu'est-ce que la récursivité en programmation",
|
| 153 |
+
"de": "was ist Rekursion in der Programmierung"
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"original": "my rust program panics with index out of bounds",
|
| 157 |
+
"rotulo": "codigo",
|
| 158 |
+
"pt_BR": "meu programa em rust dá panic com index out of bounds",
|
| 159 |
+
"en": "my rust program panics with index out of bounds",
|
| 160 |
+
"es": "mi programa en rust hace panic con index out of bounds",
|
| 161 |
+
"fr": "mon programme rust panique avec index out of bounds",
|
| 162 |
+
"de": "mein Rust-Programm panict mit index out of bounds"
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
"original": "write a sql query that counts orders per customer",
|
| 166 |
+
"rotulo": "codigo",
|
| 167 |
+
"pt_BR": "escreve uma consulta sql que conta os pedidos por cliente",
|
| 168 |
+
"en": "write a sql query that counts orders per customer",
|
| 169 |
+
"es": "escribe una consulta sql que cuente los pedidos por cliente",
|
| 170 |
+
"fr": "écris une requête sql qui compte les commandes par client",
|
| 171 |
+
"de": "schreib eine SQL-Abfrage, die die Bestellungen pro Kunde zählt"
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"original": "how do I reverse a linked list in c",
|
| 175 |
+
"rotulo": "codigo",
|
| 176 |
+
"pt_BR": "como inverto uma lista ligada em c",
|
| 177 |
+
"en": "how do I reverse a linked list in c",
|
| 178 |
+
"es": "¿cómo invierto una lista enlazada en c?",
|
| 179 |
+
"fr": "comment inverser une liste chaînée en c",
|
| 180 |
+
"de": "wie kehre ich eine verkettete Liste in C um"
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"original": "mi función en javascript devuelve nan",
|
| 184 |
+
"rotulo": "codigo",
|
| 185 |
+
"pt_BR": "minha função em javascript retorna nan",
|
| 186 |
+
"en": "my javascript function returns nan",
|
| 187 |
+
"es": "mi función en javascript devuelve nan",
|
| 188 |
+
"fr": "ma fonction javascript renvoie nan",
|
| 189 |
+
"de": "meine JavaScript-Funktion gibt NaN zurück"
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"original": "wie schreibe ich eine schleife in python",
|
| 193 |
+
"rotulo": "codigo",
|
| 194 |
+
"pt_BR": "como escrevo um loop em python",
|
| 195 |
+
"en": "how do I write a loop in python",
|
| 196 |
+
"es": "¿cómo escribo un bucle en python?",
|
| 197 |
+
"fr": "comment écrire une boucle en python",
|
| 198 |
+
"de": "wie schreibe ich eine Schleife in Python"
|
| 199 |
+
},
|
| 200 |
+
{
|
| 201 |
+
"original": "o apt dá erro de dependência quebrada",
|
| 202 |
+
"rotulo": "tecnico",
|
| 203 |
+
"pt_BR": "o apt dá erro de dependência quebrada",
|
| 204 |
+
"en": "apt gives a broken dependency error",
|
| 205 |
+
"es": "apt da un error de dependencia rota",
|
| 206 |
+
"fr": "apt affiche une erreur de dépendance cassée",
|
| 207 |
+
"de": "apt meldet einen Fehler wegen defekter Abhängigkeiten"
|
| 208 |
+
},
|
| 209 |
+
{
|
| 210 |
+
"original": "como atualizo o kernel no zorin",
|
| 211 |
+
"rotulo": "tecnico",
|
| 212 |
+
"pt_BR": "como atualizo o kernel no zorin",
|
| 213 |
+
"en": "how do I update the kernel on zorin",
|
| 214 |
+
"es": "¿cómo actualizo el kernel en zorin?",
|
| 215 |
+
"fr": "comment mettre à jour le noyau sur zorin",
|
| 216 |
+
"de": "wie aktualisiere ich den Kernel unter Zorin"
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"original": "minha placa de vídeo não aparece no linux",
|
| 220 |
+
"rotulo": "tecnico",
|
| 221 |
+
"pt_BR": "minha placa de vídeo não aparece no linux",
|
| 222 |
+
"en": "my graphics card doesn't show up on linux",
|
| 223 |
+
"es": "mi tarjeta gráfica no aparece en linux",
|
| 224 |
+
"fr": "ma carte graphique n'apparaît pas sous linux",
|
| 225 |
+
"de": "meine Grafikkarte wird unter Linux nicht angezeigt"
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"original": "como descubro qual versão do ubuntu eu tenho",
|
| 229 |
+
"rotulo": "tecnico",
|
| 230 |
+
"pt_BR": "como descubro qual versão do ubuntu eu tenho",
|
| 231 |
+
"en": "how do I find out which version of ubuntu I have",
|
| 232 |
+
"es": "¿cómo sé qué versión de ubuntu tengo?",
|
| 233 |
+
"fr": "comment savoir quelle version d'ubuntu j'ai",
|
| 234 |
+
"de": "wie finde ich heraus, welche Ubuntu-Version ich habe"
|
| 235 |
+
},
|
| 236 |
+
{
|
| 237 |
+
"original": "o bluetooth do meu notebook não funciona no linux",
|
| 238 |
+
"rotulo": "tecnico",
|
| 239 |
+
"pt_BR": "o bluetooth do meu notebook não funciona no linux",
|
| 240 |
+
"en": "my laptop's bluetooth doesn't work on linux",
|
| 241 |
+
"es": "el bluetooth de mi portátil no funciona en linux",
|
| 242 |
+
"fr": "le bluetooth de mon portable ne fonctionne pas sous linux",
|
| 243 |
+
"de": "das Bluetooth meines Laptops funktioniert unter Linux nicht"
|
| 244 |
+
},
|
| 245 |
+
{
|
| 246 |
+
"original": "como faço o ollama usar a gpu",
|
| 247 |
+
"rotulo": "tecnico",
|
| 248 |
+
"pt_BR": "como faço o ollama usar a gpu",
|
| 249 |
+
"en": "how do I make ollama use the gpu",
|
| 250 |
+
"es": "¿cómo hago que ollama use la gpu?",
|
| 251 |
+
"fr": "comment faire pour qu'ollama utilise le gpu",
|
| 252 |
+
"de": "wie bringe ich Ollama dazu, die GPU zu nutzen"
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"original": "how do I free up space on my root partition",
|
| 256 |
+
"rotulo": "tecnico",
|
| 257 |
+
"pt_BR": "como libero espaço na minha partição raiz",
|
| 258 |
+
"en": "how do I free up space on my root partition",
|
| 259 |
+
"es": "¿cómo libero espacio en mi partición raíz?",
|
| 260 |
+
"fr": "comment libérer de l'espace sur ma partition racine",
|
| 261 |
+
"de": "wie mache ich Platz auf meiner Root-Partition frei"
|
| 262 |
+
},
|
| 263 |
+
{
|
| 264 |
+
"original": "my fans are always at full speed on ubuntu",
|
| 265 |
+
"rotulo": "tecnico",
|
| 266 |
+
"pt_BR": "minhas ventoinhas estão sempre no máximo no ubuntu",
|
| 267 |
+
"en": "my fans are always at full speed on ubuntu",
|
| 268 |
+
"es": "mis ventiladores siempre están a toda velocidad en ubuntu",
|
| 269 |
+
"fr": "mes ventilateurs tournent toujours à fond sous ubuntu",
|
| 270 |
+
"de": "meine Lüfter laufen unter Ubuntu immer auf voller Drehzahl"
|
| 271 |
+
},
|
| 272 |
+
{
|
| 273 |
+
"original": "what is swap and do I need it",
|
| 274 |
+
"rotulo": "tecnico",
|
| 275 |
+
"pt_BR": "o que é swap e eu preciso dela",
|
| 276 |
+
"en": "what is swap and do I need it",
|
| 277 |
+
"es": "¿qué es el swap y lo necesito?",
|
| 278 |
+
"fr": "qu'est-ce que le swap et est-ce que j'en ai besoin",
|
| 279 |
+
"de": "was ist Swap und brauche ich das"
|
| 280 |
+
},
|
| 281 |
+
{
|
| 282 |
+
"original": "cómo cambio los permisos de una carpeta en linux",
|
| 283 |
+
"rotulo": "tecnico",
|
| 284 |
+
"pt_BR": "como mudo as permissões de uma pasta no linux",
|
| 285 |
+
"en": "how do I change a folder's permissions in linux",
|
| 286 |
+
"es": "¿cómo cambio los permisos de una carpeta en linux?",
|
| 287 |
+
"fr": "comment changer les permissions d'un dossier sous linux",
|
| 288 |
+
"de": "wie ändere ich die Berechtigungen eines Ordners unter Linux"
|
| 289 |
+
},
|
| 290 |
+
{
|
| 291 |
+
"original": "mon ordinateur ne démarre plus après la mise à jour",
|
| 292 |
+
"rotulo": "tecnico",
|
| 293 |
+
"pt_BR": "meu computador não liga mais depois da atualização",
|
| 294 |
+
"en": "my computer won't boot anymore after the update",
|
| 295 |
+
"es": "mi ordenador ya no arranca después de la actualización",
|
| 296 |
+
"fr": "mon ordinateur ne démarre plus après la mise à jour",
|
| 297 |
+
"de": "mein Computer startet nach dem Update nicht mehr"
|
| 298 |
+
},
|
| 299 |
+
{
|
| 300 |
+
"original": "coloca o volume no máximo",
|
| 301 |
+
"rotulo": "acao",
|
| 302 |
+
"pt_BR": "coloca o volume no máximo",
|
| 303 |
+
"en": "turn the volume all the way up",
|
| 304 |
+
"es": "pon el volumen al máximo",
|
| 305 |
+
"fr": "mets le volume au maximum",
|
| 306 |
+
"de": "stell die Lautstärke auf Maximum"
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"original": "desativa o wifi por favor",
|
| 310 |
+
"rotulo": "acao",
|
| 311 |
+
"pt_BR": "desativa o wifi por favor",
|
| 312 |
+
"en": "turn off the wifi please",
|
| 313 |
+
"es": "desactiva el wifi por favor",
|
| 314 |
+
"fr": "désactive le wifi s'il te plaît",
|
| 315 |
+
"de": "schalte bitte das WLAN aus"
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"original": "apaga a pasta teste da área de trabalho",
|
| 319 |
+
"rotulo": "acao",
|
| 320 |
+
"pt_BR": "apaga a pasta teste da área de trabalho",
|
| 321 |
+
"en": "delete the teste folder from the desktop",
|
| 322 |
+
"es": "borra la carpeta teste del escritorio",
|
| 323 |
+
"fr": "supprime le dossier teste du bureau",
|
| 324 |
+
"de": "lösch den Ordner teste vom Desktop"
|
| 325 |
+
},
|
| 326 |
+
{
|
| 327 |
+
"original": "aumenta o brilho da tela",
|
| 328 |
+
"rotulo": "acao",
|
| 329 |
+
"pt_BR": "aumenta o brilho da tela",
|
| 330 |
+
"en": "increase the screen brightness",
|
| 331 |
+
"es": "sube el brillo de la pantalla",
|
| 332 |
+
"fr": "augmente la luminosité de l'écran",
|
| 333 |
+
"de": "erhöhe die Bildschirmhelligkeit"
|
| 334 |
+
},
|
| 335 |
+
{
|
| 336 |
+
"original": "minimiza todas as janelas",
|
| 337 |
+
"rotulo": "acao",
|
| 338 |
+
"pt_BR": "minimiza todas as janelas",
|
| 339 |
+
"en": "minimize all windows",
|
| 340 |
+
"es": "minimiza todas las ventanas",
|
| 341 |
+
"fr": "réduis toutes les fenêtres",
|
| 342 |
+
"de": "minimiere alle Fenster"
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"original": "cria um arquivo notas.txt nos documentos",
|
| 346 |
+
"rotulo": "acao",
|
| 347 |
+
"pt_BR": "cria um arquivo notas.txt nos documentos",
|
| 348 |
+
"en": "create a notas.txt file in documents",
|
| 349 |
+
"es": "crea un archivo notas.txt en documentos",
|
| 350 |
+
"fr": "crée un fichier notas.txt dans les documents",
|
| 351 |
+
"de": "erstelle eine Datei notas.txt in Dokumente"
|
| 352 |
+
},
|
| 353 |
+
{
|
| 354 |
+
"original": "pausa a música",
|
| 355 |
+
"rotulo": "acao",
|
| 356 |
+
"pt_BR": "pausa a música",
|
| 357 |
+
"en": "pause the music",
|
| 358 |
+
"es": "pausa la música",
|
| 359 |
+
"fr": "mets la musique en pause",
|
| 360 |
+
"de": "pausiere die Musik"
|
| 361 |
+
},
|
| 362 |
+
{
|
| 363 |
+
"original": "copia as fotos do pendrive pra pasta imagens",
|
| 364 |
+
"rotulo": "acao",
|
| 365 |
+
"pt_BR": "copia as fotos do pendrive pra pasta imagens",
|
| 366 |
+
"en": "copy the photos from the usb drive to the pictures folder",
|
| 367 |
+
"es": "copia las fotos del pendrive a la carpeta imágenes",
|
| 368 |
+
"fr": "copie les photos de la clé usb dans le dossier images",
|
| 369 |
+
"de": "kopiere die Fotos vom USB-Stick in den Bilder-Ordner"
|
| 370 |
+
},
|
| 371 |
+
{
|
| 372 |
+
"original": "abre o vs code e cria um arquivo novo",
|
| 373 |
+
"rotulo": "acao",
|
| 374 |
+
"pt_BR": "abre o vs code e cria um arquivo novo",
|
| 375 |
+
"en": "open vs code and create a new file",
|
| 376 |
+
"es": "abre vs code y crea un archivo nuevo",
|
| 377 |
+
"fr": "ouvre vs code et crée un nouveau fichier",
|
| 378 |
+
"de": "öffne VS Code und erstelle eine neue Datei"
|
| 379 |
+
},
|
| 380 |
+
{
|
| 381 |
+
"original": "switch off the wifi",
|
| 382 |
+
"rotulo": "acao",
|
| 383 |
+
"pt_BR": "desliga o wifi",
|
| 384 |
+
"en": "switch off the wifi",
|
| 385 |
+
"es": "apaga el wifi",
|
| 386 |
+
"fr": "éteins le wifi",
|
| 387 |
+
"de": "schalte das WLAN aus"
|
| 388 |
+
},
|
| 389 |
+
{
|
| 390 |
+
"original": "delete the old logs in my downloads folder",
|
| 391 |
+
"rotulo": "acao",
|
| 392 |
+
"pt_BR": "apaga os logs antigos da minha pasta de downloads",
|
| 393 |
+
"en": "delete the old logs in my downloads folder",
|
| 394 |
+
"es": "borra los logs antiguos de mi carpeta de descargas",
|
| 395 |
+
"fr": "supprime les anciens logs de mon dossier téléchargements",
|
| 396 |
+
"de": "lösch die alten Logs in meinem Downloads-Ordner"
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"original": "make the screen dimmer",
|
| 400 |
+
"rotulo": "acao",
|
| 401 |
+
"pt_BR": "deixa a tela mais escura",
|
| 402 |
+
"en": "make the screen dimmer",
|
| 403 |
+
"es": "pon la pantalla más oscura",
|
| 404 |
+
"fr": "rends l'écran plus sombre",
|
| 405 |
+
"de": "mach den Bildschirm dunkler"
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"original": "skip to the next song",
|
| 409 |
+
"rotulo": "acao",
|
| 410 |
+
"pt_BR": "pula pra próxima música",
|
| 411 |
+
"en": "skip to the next song",
|
| 412 |
+
"es": "pasa a la siguiente canción",
|
| 413 |
+
"fr": "passe à la chanson suivante",
|
| 414 |
+
"de": "spring zum nächsten Lied"
|
| 415 |
+
},
|
| 416 |
+
{
|
| 417 |
+
"original": "baja el brillo de la pantalla",
|
| 418 |
+
"rotulo": "acao",
|
| 419 |
+
"pt_BR": "abaixa o brilho da tela",
|
| 420 |
+
"en": "lower the screen brightness",
|
| 421 |
+
"es": "baja el brillo de la pantalla",
|
| 422 |
+
"fr": "baisse la luminosité de l'écran",
|
| 423 |
+
"de": "verringere die Bildschirmhelligkeit"
|
| 424 |
+
},
|
| 425 |
+
{
|
| 426 |
+
"original": "coupe le son",
|
| 427 |
+
"rotulo": "acao",
|
| 428 |
+
"pt_BR": "tira o som",
|
| 429 |
+
"en": "mute the sound",
|
| 430 |
+
"es": "quita el sonido",
|
| 431 |
+
"fr": "coupe le son",
|
| 432 |
+
"de": "schalte den Ton aus"
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"original": "schalte das wlan ein",
|
| 436 |
+
"rotulo": "acao",
|
| 437 |
+
"pt_BR": "liga o wifi",
|
| 438 |
+
"en": "turn on the wifi",
|
| 439 |
+
"es": "enciende el wifi",
|
| 440 |
+
"fr": "allume le wifi",
|
| 441 |
+
"de": "schalte das WLAN ein"
|
| 442 |
+
},
|
| 443 |
+
{
|
| 444 |
+
"original": "quanto custa um ryzen 7 hoje",
|
| 445 |
+
"rotulo": "busca",
|
| 446 |
+
"pt_BR": "quanto custa um ryzen 7 hoje",
|
| 447 |
+
"en": "how much does a ryzen 7 cost today",
|
| 448 |
+
"es": "¿cuánto cuesta un ryzen 7 hoy?",
|
| 449 |
+
"fr": "combien coûte un ryzen 7 aujourd'hui",
|
| 450 |
+
"de": "was kostet ein Ryzen 7 heute"
|
| 451 |
+
},
|
| 452 |
+
{
|
| 453 |
+
"original": "pesquisa receitas de bolo de cenoura",
|
| 454 |
+
"rotulo": "busca",
|
| 455 |
+
"pt_BR": "pesquisa receitas de bolo de cenoura",
|
| 456 |
+
"en": "search for carrot cake recipes",
|
| 457 |
+
"es": "busca recetas de pastel de zanahoria",
|
| 458 |
+
"fr": "cherche des recettes de gâteau aux carottes",
|
| 459 |
+
"de": "such nach Rezepten für Karottenkuchen"
|
| 460 |
+
},
|
| 461 |
+
{
|
| 462 |
+
"original": "quem ganhou o jogo do palmeiras ontem",
|
| 463 |
+
"rotulo": "busca",
|
| 464 |
+
"pt_BR": "quem ganhou o jogo do palmeiras ontem",
|
| 465 |
+
"en": "who won the palmeiras game yesterday",
|
| 466 |
+
"es": "¿quién ganó el partido del palmeiras ayer?",
|
| 467 |
+
"fr": "qui a gagné le match de palmeiras hier",
|
| 468 |
+
"de": "wer hat gestern das Spiel von Palmeiras gewonnen"
|
| 469 |
+
},
|
| 470 |
+
{
|
| 471 |
+
"original": "me acha um vídeo de como trocar o pneu da bike",
|
| 472 |
+
"rotulo": "busca",
|
| 473 |
+
"pt_BR": "me acha um vídeo de como trocar o pneu da bike",
|
| 474 |
+
"en": "find me a video on how to change a bike tire",
|
| 475 |
+
"es": "búscame un vídeo de cómo cambiar la rueda de la bici",
|
| 476 |
+
"fr": "trouve-moi une vidéo sur comment changer le pneu du vélo",
|
| 477 |
+
"de": "find mir ein Video, wie man den Fahrradreifen wechselt"
|
| 478 |
+
},
|
| 479 |
+
{
|
| 480 |
+
"original": "quais as notícias de hoje sobre o brasil",
|
| 481 |
+
"rotulo": "busca",
|
| 482 |
+
"pt_BR": "quais as notícias de hoje sobre o brasil",
|
| 483 |
+
"en": "what's today's news about brazil",
|
| 484 |
+
"es": "¿cuáles son las noticias de hoy sobre brasil?",
|
| 485 |
+
"fr": "quelles sont les nouvelles d'aujourd'hui sur le brésil",
|
| 486 |
+
"de": "was gibt es heute für Nachrichten über Brasilien"
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"original": "qual o placar do jogo do grêmio",
|
| 490 |
+
"rotulo": "busca",
|
| 491 |
+
"pt_BR": "qual o placar do jogo do grêmio",
|
| 492 |
+
"en": "what's the score of the grêmio game",
|
| 493 |
+
"es": "¿cuál es el marcador del partido del grêmio?",
|
| 494 |
+
"fr": "quel est le score du match du grêmio",
|
| 495 |
+
"de": "wie steht es im Spiel von Grêmio"
|
| 496 |
+
},
|
| 497 |
+
{
|
| 498 |
+
"original": "vai sair gta 6 quando",
|
| 499 |
+
"rotulo": "busca",
|
| 500 |
+
"pt_BR": "quando vai sair gta 6",
|
| 501 |
+
"en": "when is gta 6 coming out",
|
| 502 |
+
"es": "¿cuándo sale gta 6?",
|
| 503 |
+
"fr": "quand est-ce que gta 6 va sortir",
|
| 504 |
+
"de": "wann erscheint GTA 6"
|
| 505 |
+
},
|
| 506 |
+
{
|
| 507 |
+
"original": "what's the price of a ps5 right now",
|
| 508 |
+
"rotulo": "busca",
|
| 509 |
+
"pt_BR": "quanto custa um ps5 agora",
|
| 510 |
+
"en": "what's the price of a ps5 right now",
|
| 511 |
+
"es": "¿cuánto cuesta una ps5 ahora mismo?",
|
| 512 |
+
"fr": "quel est le prix d'une ps5 en ce moment",
|
| 513 |
+
"de": "was kostet eine PS5 gerade"
|
| 514 |
+
},
|
| 515 |
+
{
|
| 516 |
+
"original": "look for reviews of the framework laptop",
|
| 517 |
+
"rotulo": "busca",
|
| 518 |
+
"pt_BR": "procura avaliações do notebook framework",
|
| 519 |
+
"en": "look for reviews of the framework laptop",
|
| 520 |
+
"es": "busca reseñas del portátil framework",
|
| 521 |
+
"fr": "cherche des avis sur le portable framework",
|
| 522 |
+
"de": "such nach Testberichten zum Framework-Laptop"
|
| 523 |
+
},
|
| 524 |
+
{
|
| 525 |
+
"original": "find me a video tutorial on soldering",
|
| 526 |
+
"rotulo": "busca",
|
| 527 |
+
"pt_BR": "me acha um tutorial em vídeo sobre solda",
|
| 528 |
+
"en": "find me a video tutorial on soldering",
|
| 529 |
+
"es": "búscame un tutorial en vídeo sobre soldadura",
|
| 530 |
+
"fr": "trouve-moi un tutoriel vidéo sur la soudure",
|
| 531 |
+
"de": "find mir ein Video-Tutorial zum Löten"
|
| 532 |
+
},
|
| 533 |
+
{
|
| 534 |
+
"original": "who won the champions league final",
|
| 535 |
+
"rotulo": "busca",
|
| 536 |
+
"pt_BR": "quem ganhou a final da champions league",
|
| 537 |
+
"en": "who won the champions league final",
|
| 538 |
+
"es": "¿quién ganó la final de la champions league?",
|
| 539 |
+
"fr": "qui a gagné la finale de la ligue des champions",
|
| 540 |
+
"de": "wer hat das Champions-League-Finale gewonnen"
|
| 541 |
+
},
|
| 542 |
+
{
|
| 543 |
+
"original": "busca el horario del partido del madrid",
|
| 544 |
+
"rotulo": "busca",
|
| 545 |
+
"pt_BR": "busca o horário do jogo do madrid",
|
| 546 |
+
"en": "look up the time of the madrid game",
|
| 547 |
+
"es": "busca el horario del partido del madrid",
|
| 548 |
+
"fr": "cherche l'horaire du match du madrid",
|
| 549 |
+
"de": "such die Anstoßzeit des Madrid-Spiels"
|
| 550 |
+
},
|
| 551 |
+
{
|
| 552 |
+
"original": "quel temps fera-t-il à lyon ce week-end",
|
| 553 |
+
"rotulo": "busca",
|
| 554 |
+
"pt_BR": "como vai estar o tempo em lyon neste fim de semana",
|
| 555 |
+
"en": "what will the weather be like in lyon this weekend",
|
| 556 |
+
"es": "¿qué tiempo hará en lyon este fin de semana?",
|
| 557 |
+
"fr": "quel temps fera-t-il à lyon ce week-end",
|
| 558 |
+
"de": "wie wird das Wetter in Lyon am Wochenende"
|
| 559 |
+
},
|
| 560 |
+
{
|
| 561 |
+
"original": "e aí, blz?",
|
| 562 |
+
"rotulo": "simples",
|
| 563 |
+
"pt_BR": "e aí, blz?",
|
| 564 |
+
"en": "hey, how's it going?",
|
| 565 |
+
"es": "¿qué tal, todo bien?",
|
| 566 |
+
"fr": "salut, ça va ?",
|
| 567 |
+
"de": "hey, alles klar?"
|
| 568 |
+
},
|
| 569 |
+
{
|
| 570 |
+
"original": "muito obrigado mesmo",
|
| 571 |
+
"rotulo": "simples",
|
| 572 |
+
"pt_BR": "muito obrigado mesmo",
|
| 573 |
+
"en": "thank you so much",
|
| 574 |
+
"es": "muchísimas gracias",
|
| 575 |
+
"fr": "merci beaucoup vraiment",
|
| 576 |
+
"de": "vielen, vielen Dank"
|
| 577 |
+
},
|
| 578 |
+
{
|
| 579 |
+
"original": "boa noite tars",
|
| 580 |
+
"rotulo": "simples",
|
| 581 |
+
"pt_BR": "boa noite tars",
|
| 582 |
+
"en": "good night tars",
|
| 583 |
+
"es": "buenas noches tars",
|
| 584 |
+
"fr": "bonne nuit tars",
|
| 585 |
+
"de": "gute Nacht tars"
|
| 586 |
+
},
|
| 587 |
+
{
|
| 588 |
+
"original": "abre o whatsapp web",
|
| 589 |
+
"rotulo": "simples",
|
| 590 |
+
"pt_BR": "abre o whatsapp web",
|
| 591 |
+
"en": "open whatsapp web",
|
| 592 |
+
"es": "abre whatsapp web",
|
| 593 |
+
"fr": "ouvre whatsapp web",
|
| 594 |
+
"de": "öffne WhatsApp Web"
|
| 595 |
+
},
|
| 596 |
+
{
|
| 597 |
+
"original": "entra no github",
|
| 598 |
+
"rotulo": "simples",
|
| 599 |
+
"pt_BR": "entra no github",
|
| 600 |
+
"en": "go to github",
|
| 601 |
+
"es": "entra en github",
|
| 602 |
+
"fr": "va sur github",
|
| 603 |
+
"de": "geh auf GitHub"
|
| 604 |
+
},
|
| 605 |
+
{
|
| 606 |
+
"original": "valeu!",
|
| 607 |
+
"rotulo": "simples",
|
| 608 |
+
"pt_BR": "valeu!",
|
| 609 |
+
"en": "thanks!",
|
| 610 |
+
"es": "¡gracias!",
|
| 611 |
+
"fr": "merci !",
|
| 612 |
+
"de": "danke!"
|
| 613 |
+
},
|
| 614 |
+
{
|
| 615 |
+
"original": "hi, what's up",
|
| 616 |
+
"rotulo": "simples",
|
| 617 |
+
"pt_BR": "oi, e aí",
|
| 618 |
+
"en": "hi, what's up",
|
| 619 |
+
"es": "hola, ¿qué tal?",
|
| 620 |
+
"fr": "salut, quoi de neuf",
|
| 621 |
+
"de": "hi, was geht"
|
| 622 |
+
},
|
| 623 |
+
{
|
| 624 |
+
"original": "thanks mate",
|
| 625 |
+
"rotulo": "simples",
|
| 626 |
+
"pt_BR": "valeu, cara",
|
| 627 |
+
"en": "thanks mate",
|
| 628 |
+
"es": "gracias, tío",
|
| 629 |
+
"fr": "merci mon pote",
|
| 630 |
+
"de": "danke, Kumpel"
|
| 631 |
+
},
|
| 632 |
+
{
|
| 633 |
+
"original": "open reddit",
|
| 634 |
+
"rotulo": "simples",
|
| 635 |
+
"pt_BR": "abre o reddit",
|
| 636 |
+
"en": "open reddit",
|
| 637 |
+
"es": "abre reddit",
|
| 638 |
+
"fr": "ouvre reddit",
|
| 639 |
+
"de": "öffne Reddit"
|
| 640 |
+
},
|
| 641 |
+
{
|
| 642 |
+
"original": "buenas tardes",
|
| 643 |
+
"rotulo": "simples",
|
| 644 |
+
"pt_BR": "boa tarde",
|
| 645 |
+
"en": "good afternoon",
|
| 646 |
+
"es": "buenas tardes",
|
| 647 |
+
"fr": "bon après-midi",
|
| 648 |
+
"de": "guten Tag"
|
| 649 |
+
},
|
| 650 |
+
{
|
| 651 |
+
"original": "bonjour",
|
| 652 |
+
"rotulo": "simples",
|
| 653 |
+
"pt_BR": "bom dia",
|
| 654 |
+
"en": "hello",
|
| 655 |
+
"es": "buenos días",
|
| 656 |
+
"fr": "bonjour",
|
| 657 |
+
"de": "guten Morgen"
|
| 658 |
+
},
|
| 659 |
+
{
|
| 660 |
+
"original": "quem descobriu o brasil",
|
| 661 |
+
"rotulo": "geral",
|
| 662 |
+
"pt_BR": "quem descobriu o brasil",
|
| 663 |
+
"en": "who discovered brazil",
|
| 664 |
+
"es": "¿quién descubrió brasil?",
|
| 665 |
+
"fr": "qui a découvert le brésil",
|
| 666 |
+
"de": "wer hat Brasilien entdeckt"
|
| 667 |
+
},
|
| 668 |
+
{
|
| 669 |
+
"original": "me explica como funciona a inflação",
|
| 670 |
+
"rotulo": "geral",
|
| 671 |
+
"pt_BR": "me explica como funciona a inflação",
|
| 672 |
+
"en": "explain to me how inflation works",
|
| 673 |
+
"es": "explícame cómo funciona la inflación",
|
| 674 |
+
"fr": "explique-moi comment fonctionne l'inflation",
|
| 675 |
+
"de": "erklär mir, wie Inflation funktioniert"
|
| 676 |
+
},
|
| 677 |
+
{
|
| 678 |
+
"original": "escreve uma legenda pra uma foto de praia",
|
| 679 |
+
"rotulo": "geral",
|
| 680 |
+
"pt_BR": "escreve uma legenda pra uma foto de praia",
|
| 681 |
+
"en": "write a caption for a beach photo",
|
| 682 |
+
"es": "escribe un pie de foto para una foto de playa",
|
| 683 |
+
"fr": "écris une légende pour une photo de plage",
|
| 684 |
+
"de": "schreib eine Bildunterschrift für ein Strandfoto"
|
| 685 |
+
},
|
| 686 |
+
{
|
| 687 |
+
"original": "me dá uma receita de pão de queijo",
|
| 688 |
+
"rotulo": "geral",
|
| 689 |
+
"pt_BR": "me dá uma receita de pão de queijo",
|
| 690 |
+
"en": "give me a recipe for pão de queijo",
|
| 691 |
+
"es": "dame una receta de pão de queijo",
|
| 692 |
+
"fr": "donne-moi une recette de pão de queijo",
|
| 693 |
+
"de": "gib mir ein Rezept für Pão de Queijo"
|
| 694 |
+
},
|
| 695 |
+
{
|
| 696 |
+
"original": "quanto é 15% de 240",
|
| 697 |
+
"rotulo": "geral",
|
| 698 |
+
"pt_BR": "quanto é 15% de 240",
|
| 699 |
+
"en": "what is 15% of 240",
|
| 700 |
+
"es": "¿cuánto es el 15% de 240?",
|
| 701 |
+
"fr": "combien font 15 % de 240",
|
| 702 |
+
"de": "wie viel sind 15 % von 240"
|
| 703 |
+
},
|
| 704 |
+
{
|
| 705 |
+
"original": "me sugere nomes pra um gato",
|
| 706 |
+
"rotulo": "geral",
|
| 707 |
+
"pt_BR": "me sugere nomes pra um gato",
|
| 708 |
+
"en": "suggest some names for a cat",
|
| 709 |
+
"es": "sugiéreme nombres para un gato",
|
| 710 |
+
"fr": "suggère-moi des noms pour un chat",
|
| 711 |
+
"de": "schlag mir Namen für eine Katze vor"
|
| 712 |
+
},
|
| 713 |
+
{
|
| 714 |
+
"original": "resume o livro dom casmurro",
|
| 715 |
+
"rotulo": "geral",
|
| 716 |
+
"pt_BR": "resume o livro dom casmurro",
|
| 717 |
+
"en": "summarize the book dom casmurro",
|
| 718 |
+
"es": "resume el libro dom casmurro",
|
| 719 |
+
"fr": "résume le livre dom casmurro",
|
| 720 |
+
"de": "fasse das Buch Dom Casmurro zusammen"
|
| 721 |
+
},
|
| 722 |
+
{
|
| 723 |
+
"original": "what causes the seasons on earth",
|
| 724 |
+
"rotulo": "geral",
|
| 725 |
+
"pt_BR": "o que causa as estações do ano na terra",
|
| 726 |
+
"en": "what causes the seasons on earth",
|
| 727 |
+
"es": "¿qué causa las estaciones en la tierra?",
|
| 728 |
+
"fr": "qu'est-ce qui cause les saisons sur terre",
|
| 729 |
+
"de": "was verursacht die Jahreszeiten auf der Erde"
|
| 730 |
+
},
|
| 731 |
+
{
|
| 732 |
+
"original": "write a thank you note for my teacher",
|
| 733 |
+
"rotulo": "geral",
|
| 734 |
+
"pt_BR": "escreve um bilhete de agradecimento pro meu professor",
|
| 735 |
+
"en": "write a thank you note for my teacher",
|
| 736 |
+
"es": "escribe una nota de agradecimiento para mi profesor",
|
| 737 |
+
"fr": "écris un mot de remerciement pour mon professeur",
|
| 738 |
+
"de": "schreib eine Dankeskarte für meinen Lehrer"
|
| 739 |
+
},
|
| 740 |
+
{
|
| 741 |
+
"original": "tell me a joke",
|
| 742 |
+
"rotulo": "geral",
|
| 743 |
+
"pt_BR": "me conta uma piada",
|
| 744 |
+
"en": "tell me a joke",
|
| 745 |
+
"es": "cuéntame un chiste",
|
| 746 |
+
"fr": "raconte-moi une blague",
|
| 747 |
+
"de": "erzähl mir einen Witz"
|
| 748 |
+
},
|
| 749 |
+
{
|
| 750 |
+
"original": "¿quién pintó la mona lisa?",
|
| 751 |
+
"rotulo": "geral",
|
| 752 |
+
"pt_BR": "quem pintou a mona lisa?",
|
| 753 |
+
"en": "who painted the mona lisa?",
|
| 754 |
+
"es": "¿quién pintó la mona lisa?",
|
| 755 |
+
"fr": "qui a peint la joconde ?",
|
| 756 |
+
"de": "wer hat die Mona Lisa gemalt?"
|
| 757 |
+
},
|
| 758 |
+
{
|
| 759 |
+
"original": "écris un petit poème sur la pluie",
|
| 760 |
+
"rotulo": "geral",
|
| 761 |
+
"pt_BR": "escreve um poeminha sobre a chuva",
|
| 762 |
+
"en": "write a short poem about the rain",
|
| 763 |
+
"es": "escribe un poema corto sobre la lluvia",
|
| 764 |
+
"fr": "écris un petit poème sur la pluie",
|
| 765 |
+
"de": "schreib ein kleines Gedicht über den Regen"
|
| 766 |
+
},
|
| 767 |
+
{
|
| 768 |
+
"original": "was ist der unterschied zwischen wetter und klima",
|
| 769 |
+
"rotulo": "geral",
|
| 770 |
+
"pt_BR": "qual a diferença entre tempo e clima",
|
| 771 |
+
"en": "what's the difference between weather and climate",
|
| 772 |
+
"es": "¿cuál es la diferencia entre tiempo y clima?",
|
| 773 |
+
"fr": "quelle est la différence entre la météo et le climat",
|
| 774 |
+
"de": "was ist der Unterschied zwischen Wetter und Klima"
|
| 775 |
+
}
|
| 776 |
+
]
|
app/murph/gerado/de.json
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"visao": [
|
| 3 |
+
"was steht in dem Popup, das gerade aufgegangen ist?",
|
| 4 |
+
"klick mal auf das rote X oben rechts",
|
| 5 |
+
"was siehst du auf meinem Bildschirm",
|
| 6 |
+
"drück den blauen Button in der Mitte",
|
| 7 |
+
"welche Fehlermeldung wird da angezeigt?",
|
| 8 |
+
"kannst du mir sagen, was in dem Terminalfenster links steht",
|
| 9 |
+
"klick auf das kleine Zahnrad neben dem Suchfeld",
|
| 10 |
+
"lies bitte die Überschrift der Seite vor",
|
| 11 |
+
"was ist das für ein Symbol unten in der Taskleiste, das so blinkt",
|
| 12 |
+
"zieh das Bild da oben links in den Ordner daneben",
|
| 13 |
+
"bitte beschreib mir das Foto, das gerade offen ist",
|
| 14 |
+
"welcher Tab ist im Browser gerade aktiv",
|
| 15 |
+
"klick doppelt auf die gelbe Ordnerkachel auf dem Desktop",
|
| 16 |
+
"steht da irgendwo ein Knopf zum Weiter?",
|
| 17 |
+
"schau nach, ob der Fortschrittsbalken schon voll ist",
|
| 18 |
+
"was bedeutet das orange Warndreieck da im Fenster",
|
| 19 |
+
"mach einen Rechtsklick auf das Icon ganz rechts in der Leiste",
|
| 20 |
+
"wie viele ungelesene Mails zeigt mein Postfach an",
|
| 21 |
+
"lies mir die Zahlen in der Tabelle da vor",
|
| 22 |
+
"guck mal auf den Screen und sag mir ob da ein Fehler ist",
|
| 23 |
+
"klick auf den Link, der unterstrichen ist, ganz unten",
|
| 24 |
+
"welche Uhrzeit steht oben in der Ecke",
|
| 25 |
+
"was fuer ein Dialog ist das, der da aufgepoppt ist",
|
| 26 |
+
"Sie sehen doch das Fenster, was soll ich da anklicken?",
|
| 27 |
+
"drueck auf das Häkchen im grünen Kreis",
|
| 28 |
+
"welches Lied wird im Player gerade angezeigt",
|
| 29 |
+
"scroll ein Stück runter und sag mir, was dann kommt",
|
| 30 |
+
"fass mal zusammen, was in dem geöffneten PDF auf dieser Seite steht",
|
| 31 |
+
"klick das Kontrollkästchen neben 'Ich stimme zu' an",
|
| 32 |
+
"wo ist hier der Speichern-Knopf, ich finde ihn nicht",
|
| 33 |
+
"was zeigt die Grafik auf dem Bildschirm eigentlich",
|
| 34 |
+
"schieb den Regler da rechts ganz nach oben",
|
| 35 |
+
"welche Farbe hat der Hintergrund von dem Fenster vorne",
|
| 36 |
+
"lies das Kleingedruckte unter dem Formular",
|
| 37 |
+
"ist in dem Chatfenster eine neue Nachricht zu sehen?",
|
| 38 |
+
"tipp auf den Pfeil nach unten neben dem Namen",
|
| 39 |
+
"was ist das für eine Benachrichtigung, die unten rechts kurz kam",
|
| 40 |
+
"klick auf das dritte Bild in der Reihe",
|
| 41 |
+
"schau mal, ob im Fenster eine Meldung mit 'Error' steht",
|
| 42 |
+
"sag mir, welche Programme gerade auf dem Bildschirm offen sind",
|
| 43 |
+
"markier den Text im zweiten Absatz mit der Maus",
|
| 44 |
+
"was steht auf dem Button unten links",
|
| 45 |
+
"klick auf die Lupe oben",
|
| 46 |
+
"wie heißt die Datei, die im Editor offen ist? steht oben im Titel",
|
| 47 |
+
"welcher Wert steht in der Zelle, die gerade markiert ist",
|
| 48 |
+
"zieh das Fenster mal in die linke Bildschirmhälfte, das mit dem grauen Rand",
|
| 49 |
+
"erkennst du, was auf dem Diagramm dargestellt ist?",
|
| 50 |
+
"schliess das Fenster mit dem roten Balken oben",
|
| 51 |
+
"welche Option ist in dem Dropdown gerade ausgewählt",
|
| 52 |
+
"was fuer ein Icon ist das mit der Wolke drauf",
|
| 53 |
+
"bitte klicken Sie auf das Symbol mit dem Stift",
|
| 54 |
+
"lies mir die Beschreibung unter dem Video vor",
|
| 55 |
+
"steht im Captcha irgendwas lesbares?",
|
| 56 |
+
"was will dieses Fenster von mir",
|
| 57 |
+
"guck ob da irgendwo 'Download abgeschlossen' steht",
|
| 58 |
+
"klick auf den grauen Knopf direkt unter dem Textfeld",
|
| 59 |
+
"auf welcher Seite der Doku bin ich gerade",
|
| 60 |
+
"wie viel Prozent zeigt der Akku oben an",
|
| 61 |
+
"da ist so ein komisches Symbol neben dem WLAN-Zeichen, was ist das",
|
| 62 |
+
"beschreib kurz das Layout der Webseite, die ich offen habe",
|
| 63 |
+
"klick in das leere Feld oben und dann auf den Pfeil",
|
| 64 |
+
"welche Sprache ist der Text auf dem Bildschirm",
|
| 65 |
+
"übersetz mir den Text, der in dem Fenster da steht",
|
| 66 |
+
"such auf dem Bildschirm das Menü mit den drei Punkten und klick drauf",
|
| 67 |
+
"welcher Nutzer ist in dem Programm da oben angemeldet",
|
| 68 |
+
"ist der Schalter da im Fenster an oder aus?",
|
| 69 |
+
"klick den vierten Eintrag in der Liste an",
|
| 70 |
+
"was sagt die Statuszeile ganz unten im Fenster",
|
| 71 |
+
"da blinkt was in der Ecke, schau mal was das ist",
|
| 72 |
+
"lies vor, was im Terminal als letzte Zeile ausgegeben wurde"
|
| 73 |
+
],
|
| 74 |
+
"codigo": [
|
| 75 |
+
"schreib mir ein Python-Skript, das alle CSV-Dateien in einem Ordner zusammenführt",
|
| 76 |
+
"was macht dieser reguläre Ausdruck: ^\\d{3}-\\w+$",
|
| 77 |
+
"mein JavaScript wirft 'undefined is not a function', woran liegt das",
|
| 78 |
+
"erklär mir Rekursion anhand eines Beispiels in Java",
|
| 79 |
+
"wie funktioniert async await in JavaScript?",
|
| 80 |
+
"schreib eine Klasse in C#, die ein Bankkonto darstellt",
|
| 81 |
+
"TypeError: 'NoneType' object is not subscriptable, was hab ich falsch gemacht",
|
| 82 |
+
"mach aus dieser for-Schleife eine List Comprehension",
|
| 83 |
+
"wie schreibe ich einen Unit-Test mit pytest",
|
| 84 |
+
"segmentation fault in meinem C Programm, hilfe",
|
| 85 |
+
"was ist der Unterschied zwischen == und === in JS",
|
| 86 |
+
"kannst du meine Rust-Funktion optimieren, sie ist zu langsam",
|
| 87 |
+
"bau mir eine kleine REST API mit Flask",
|
| 88 |
+
"wie verbinde ich mich in Python mit einer SQLite-Datenbank",
|
| 89 |
+
"schreib ein bash-Skript, das Backups mit Datum im Namen anlegt",
|
| 90 |
+
"warum gibt mein SQL-Query doppelte Zeilen zurück",
|
| 91 |
+
"erklär mal Closures in Python",
|
| 92 |
+
"was ist ein Pointer in C und wofür braucht man den",
|
| 93 |
+
"programmier ein Tic-Tac-Toe in Python für die Konsole",
|
| 94 |
+
"wie mach ich in React einen useEffect, der nur einmal läuft",
|
| 95 |
+
"mein Go-Programm hat ein Deadlock, alle goroutines schlafen",
|
| 96 |
+
"schreib eine Funktion, die prüft, ob ein String ein Palindrom ist",
|
| 97 |
+
"IndexError: list index out of range – wie behebe ich das",
|
| 98 |
+
"was bedeutet 'static' in Java",
|
| 99 |
+
"konvertier dieses JavaScript nach TypeScript",
|
| 100 |
+
"wie parse ich JSON in Rust mit serde",
|
| 101 |
+
"schreib mir ein Regex für E-Mail-Adressen",
|
| 102 |
+
"erklär mir bitte Big-O-Notation mit Codebeispielen",
|
| 103 |
+
"der Kotlin Compiler sagt 'unresolved reference', was heisst das",
|
| 104 |
+
"wie lese ich Kommandozeilenargumente in Python ein",
|
| 105 |
+
"kannst du den Code kommentieren, damit ich ihn verstehe",
|
| 106 |
+
"schreib ein Programm in C, das die Fibonacci-Zahlen ausgibt",
|
| 107 |
+
"was sind Generics in TypeScript",
|
| 108 |
+
"meine Django-Migration schlägt fehl mit IntegrityError",
|
| 109 |
+
"implementier eine verkettete Liste in C++",
|
| 110 |
+
"wie funktioniert Vererbung in Python, zeig mal ein Beispiel",
|
| 111 |
+
"mein CSS Flexbox zentriert das div nicht, hier ist der code",
|
| 112 |
+
"schreib einen Web-Scraper mit BeautifulSoup",
|
| 113 |
+
"was ist der Unterschied zwischen einer abstrakten Klasse und einem Interface",
|
| 114 |
+
"refaktorier diese Funktion, sie ist viel zu lang",
|
| 115 |
+
"warum bekomme ich 'borrowed value does not live long enough' in Rust",
|
| 116 |
+
"wie mache ich einen HTTP POST mit fetch",
|
| 117 |
+
"schreib eine Lua-Funktion, die eine Tabelle sortiert",
|
| 118 |
+
"meine Schleife in PHP läuft endlos",
|
| 119 |
+
"erstell mir ein Makefile für ein kleines C Projekt",
|
| 120 |
+
"wie benutze ich Git-Hooks, um vor dem Commit den Linter laufen zu lassen",
|
| 121 |
+
"was macht der yield-Befehl in Python",
|
| 122 |
+
"NullPointerException in Zeile 42, woran kann das liegen",
|
| 123 |
+
"schreib ein Node.js Skript, das eine Datei zeilenweise liest",
|
| 124 |
+
"binäre Suche in Java implementieren bitte",
|
| 125 |
+
"wie funktionieren Decorators in python",
|
| 126 |
+
"mein pandas DataFrame gibt SettingWithCopyWarning aus",
|
| 127 |
+
"schreib eine GDScript Funktion für Spielerbewegung in Godot",
|
| 128 |
+
"was ist Dependency Injection, erklärt mit Code",
|
| 129 |
+
"hilf mir, den Memory Leak in meinem C++ Code zu finden",
|
| 130 |
+
"wie schreib ich eine Shell-Funktion, die prüft ob eine Datei existiert",
|
| 131 |
+
"Sie könnten mir bitte eine Quicksort-Implementierung in Haskell zeigen",
|
| 132 |
+
"mein Vue-Component rendert nicht neu, wenn sich die Daten ändern",
|
| 133 |
+
"wie kann ich in Python Threads benutzen",
|
| 134 |
+
"schreib eine SQL Abfrage, die den Umsatz pro Monat summiert",
|
| 135 |
+
"was bedeutet der Fehler 'cannot find symbol' in java",
|
| 136 |
+
"mach mir ein kleines Snake-Spiel mit pygame",
|
| 137 |
+
"wie teste ich eine Funktion, die eine API aufruft, mit Mocks",
|
| 138 |
+
"erklär mir den Unterschied zwischen let, const und var",
|
| 139 |
+
"meine Rekursion gibt RecursionError: maximum recursion depth exceeded",
|
| 140 |
+
"schreib ein Tkinter-Fenster mit einem Button und einem Label",
|
| 141 |
+
"wie lese ich Umgebungsvariablen in Go aus",
|
| 142 |
+
"ich hab nen off-by-one fehler in meiner schleife, kannst du drüberschauen",
|
| 143 |
+
"was ist ein Race Condition und wie verhindere ich sie im Code",
|
| 144 |
+
"schreib ein Python-Programm, das Wörter in einem Text zählt"
|
| 145 |
+
],
|
| 146 |
+
"tecnico": [
|
| 147 |
+
"seit dem letzten Update bootet mein Ubuntu nur noch in einen schwarzen Bildschirm",
|
| 148 |
+
"wie installiere ich die Nvidia Treiber unter Fedora",
|
| 149 |
+
"was macht der Befehl chmod 755 genau",
|
| 150 |
+
"mein Ton geht unter Linux Mint nicht mehr, was kann ich tun",
|
| 151 |
+
"wie installiere ich Steam auf Arch",
|
| 152 |
+
"apt sagt 'Could not get lock /var/lib/dpkg/lock', was jetzt",
|
| 153 |
+
"wie finde ich heraus, welcher Prozess den Port 8080 belegt",
|
| 154 |
+
"erklär mir, was systemd eigentlich ist",
|
| 155 |
+
"Bluetooth-Kopfhörer werden unter Pop!_OS nicht erkannt",
|
| 156 |
+
"wie mounte ich eine externe Festplatte automatisch beim Start",
|
| 157 |
+
"meine Festplatte ist voll, wie finde ich raus, was so viel Platz frisst",
|
| 158 |
+
"was ist der Unterschied zwischen Flatpak und Snap",
|
| 159 |
+
"wie richte ich einen Cronjob ein",
|
| 160 |
+
"der Drucker wird von CUPS nicht gefunden",
|
| 161 |
+
"warum ist mein Laptop unter Linux so viel lauter als unter Windows",
|
| 162 |
+
"wie aktualisiere ich den Kernel bei Debian",
|
| 163 |
+
"Grub zeigt Windows nicht mehr an nach der Linux-Installation",
|
| 164 |
+
"wie ändere ich die Standard-Shell auf zsh",
|
| 165 |
+
"was bedeutet 'permission denied' beim Ausführen meines Skripts im Terminal",
|
| 166 |
+
"das WLAN bricht unter Manjaro ständig ab",
|
| 167 |
+
"wie kann ich Programme beim Systemstart automatisch starten lassen",
|
| 168 |
+
"erklär mir die Ordnerstruktur von Linux, also /etc, /var, /usr usw",
|
| 169 |
+
"wie installiere ich eine .deb Datei",
|
| 170 |
+
"mein Bildschirm flackert unter Wayland, unter X11 nicht",
|
| 171 |
+
"wie mache ich unter Linux eine Swap-Datei größer",
|
| 172 |
+
"was ist sudo und warum muss ich mein Passwort eingeben",
|
| 173 |
+
"pacman meldet einen Schlüsselfehler beim Update",
|
| 174 |
+
"wie kann ich sehen, wie warm meine CPU unter Linux ist",
|
| 175 |
+
"der Dateimanager stürzt jedes mal ab, wenn ich einen Ordner öffne",
|
| 176 |
+
"wie richte ich SSH ein, damit ich mich ohne Passwort einloggen kann",
|
| 177 |
+
"welches Kommando zeigt mir den freien Speicherplatz an",
|
| 178 |
+
"meine zweite Bildschirm wird nicht erkannt unter KDE",
|
| 179 |
+
"wie installier ich Docker auf Ubuntu 24.04",
|
| 180 |
+
"was ist der Unterschied zwischen apt und apt-get",
|
| 181 |
+
"Maus-Scrollen ist unter GNOME viel zu schnell, wie stell ich das dauerhaft ein",
|
| 182 |
+
"wie deinstalliere ich ein Programm komplett samt Konfigdateien",
|
| 183 |
+
"mein System hängt beim Herunterfahren bei 'a stop job is running'",
|
| 184 |
+
"wie lese ich die Systemlogs mit journalctl",
|
| 185 |
+
"Wine-Programme starten bei mir nicht, woran liegt das",
|
| 186 |
+
"wie verschlüssele ich einen USB-Stick unter Linux",
|
| 187 |
+
"erklär mir, was eine Paketquelle bzw. ein Repository ist",
|
| 188 |
+
"nach dem Suspend geht das Touchpad nicht mehr",
|
| 189 |
+
"wie ändere ich die Tastaturbelegung auf Deutsch in der Konsole",
|
| 190 |
+
"kann ich unter Linux Windows-Spiele spielen und wie richte ich Proton ein",
|
| 191 |
+
"mein Rechner wird nach ein paar Stunden super langsam, RAM voll",
|
| 192 |
+
"wie mache ich ein Backup von meinem ganzen System mit Timeshift",
|
| 193 |
+
"was machen die Befehle grep und awk",
|
| 194 |
+
"flatpak apps sehen nicht aus wie mein restliches Theme, wie fix ich das",
|
| 195 |
+
"wie installiere ich Python 3.12 neben der Systemversion",
|
| 196 |
+
"die Webcam funktioniert in keinem Programm unter linux",
|
| 197 |
+
"wie setze ich das root Passwort zurück, wenn ich es vergessen habe",
|
| 198 |
+
"was ist ein Dateisystem wie ext4 oder btrfs und welches soll ich nehmen",
|
| 199 |
+
"Sie wissen nicht zufällig, warum mein Fedora keine Updates mehr ziehen kann?",
|
| 200 |
+
"wie erstelle ich einen neuen Benutzer über das Terminal",
|
| 201 |
+
"die Uhrzeit ist nach Dualboot mit Windows immer falsch",
|
| 202 |
+
"wie installiere ich Schriftarten unter Linux",
|
| 203 |
+
"mein Mikrofon wird in PipeWire angezeigt aber nimmt nichts auf",
|
| 204 |
+
"was bedeutet 'dependency hell' und wie löse ich kaputte Abhängigkeiten mit dpkg",
|
| 205 |
+
"wie richte ich eine Firewall mit ufw ein",
|
| 206 |
+
"Steam startet nicht mehr, im Terminal kommt ein libGL Fehler",
|
| 207 |
+
"wie kann ich Umgebungsvariablen dauerhaft setzen",
|
| 208 |
+
"welche Linux Distro ist gut für alte Laptops und warum",
|
| 209 |
+
"wie tausche ich unter linux mint den Desktop von Cinnamon auf XFCE",
|
| 210 |
+
"mein Rechner erkennt die NVMe SSD bei der Installation nicht",
|
| 211 |
+
"wie funktioniert das mit Rechten und Gruppen unter Linux",
|
| 212 |
+
"wie aktiviere ich Hibernate unter Ubuntu",
|
| 213 |
+
"der Login-Screen hängt in einer Schleife, ich komme nicht auf den Desktop",
|
| 214 |
+
"wie installiere ich ein AppImage richtig, sodass es im Menü auftaucht",
|
| 215 |
+
"was macht rm -rf und warum soll man damit vorsichtig sein",
|
| 216 |
+
"wie kann ich die Bildschirmauflösung per xrandr einstellen, erklär mal"
|
| 217 |
+
],
|
| 218 |
+
"acao": [
|
| 219 |
+
"öffne Spotify",
|
| 220 |
+
"mach den Rechner aus",
|
| 221 |
+
"stell die Lautstärke auf 30 Prozent",
|
| 222 |
+
"schalte WLAN aus",
|
| 223 |
+
"sperr bitte sofort die Sitzung",
|
| 224 |
+
"mach einen Screenshot",
|
| 225 |
+
"benenne die Datei bericht.txt in bericht_final.txt um",
|
| 226 |
+
"verschieb alle PDFs aus Downloads in den Ordner Dokumente",
|
| 227 |
+
"schließ Thunderbird",
|
| 228 |
+
"mach die Helligkeit ein bisschen heller",
|
| 229 |
+
"starte VS Code",
|
| 230 |
+
"lösch die Datei test.log auf dem Desktop",
|
| 231 |
+
"schreib in Telegram an Max: bin in 10 Minuten da",
|
| 232 |
+
"aktivier den Nachtmodus",
|
| 233 |
+
"mach Bluetooth an bitte",
|
| 234 |
+
"öffne das Terminal",
|
| 235 |
+
"stumm schalten",
|
| 236 |
+
"leg im Ordner Bilder einen neuen Ordner Urlaub 2026 an",
|
| 237 |
+
"starte den Computer neu",
|
| 238 |
+
"öffne den Taschenrechner",
|
| 239 |
+
"schick Anna auf WhatsApp 'Alles Gute zum Geburtstag!'",
|
| 240 |
+
"mach den Ton wieder an",
|
| 241 |
+
"wechsel auf den hellen Modus",
|
| 242 |
+
"kopier die Datei notizen.md in meinen Home-Ordner",
|
| 243 |
+
"öffne GIMP und dann die Datei logo.png",
|
| 244 |
+
"schließ alle Firefox-Fenster",
|
| 245 |
+
"stell den Bildschirm dunkler",
|
| 246 |
+
"verbinde dich mit dem WLAN Fritzbox 7590",
|
| 247 |
+
"minimier alle Fenster",
|
| 248 |
+
"öffne die Systemeinstellungen",
|
| 249 |
+
"mach den Rechner in den Ruhezustand",
|
| 250 |
+
"starte Discord",
|
| 251 |
+
"leer den Papierkorb",
|
| 252 |
+
"entpack die zip datei in Downloads",
|
| 253 |
+
"tipp im Texteditor 'Einkaufsliste: Milch, Brot, Eier'",
|
| 254 |
+
"koppel meine Kopfhörer Sony WH-1000XM5",
|
| 255 |
+
"lauter",
|
| 256 |
+
"leiser bitte",
|
| 257 |
+
"öffne LibreOffice Writer",
|
| 258 |
+
"schalt den Flugmodus ein",
|
| 259 |
+
"benenn den Ordner neu in Projekte",
|
| 260 |
+
"mach Steam zu",
|
| 261 |
+
"stell einen Timer auf 15 Minuten",
|
| 262 |
+
"öffne meinen Downloads-Ordner",
|
| 263 |
+
"nimm einen Screenshot vom aktiven Fenster auf",
|
| 264 |
+
"deaktiviere Bluetooth",
|
| 265 |
+
"starte OBS Studio",
|
| 266 |
+
"melde mich ab",
|
| 267 |
+
"schreib eine Mail an chef@firma.de mit Betreff Urlaubsantrag",
|
| 268 |
+
"öffnen Sie bitte den Dateimanager im Ordner Musik",
|
| 269 |
+
"lösch alle .tmp Dateien in meinem Downloads",
|
| 270 |
+
"mach die Musik aus",
|
| 271 |
+
"spiel das nächste Lied in Spotify ab",
|
| 272 |
+
"pausier die Wiedergabe",
|
| 273 |
+
"stell die Helligkeit auf maximal",
|
| 274 |
+
"schalt die Tastaturbeleuchtung aus",
|
| 275 |
+
"öffne Blender",
|
| 276 |
+
"fahr den Laptop in 20 Minuten runter",
|
| 277 |
+
"stell den Wecker auf 7 Uhr",
|
| 278 |
+
"aendere das Hintergrundbild auf strand.jpg aus meinen Bildern",
|
| 279 |
+
"start mal kurz den Systemmonitor",
|
| 280 |
+
"verschieb die Datei rechnung.pdf in den Ordner Steuer",
|
| 281 |
+
"schreib in den Slack-Kanal #team: Meeting verschiebt sich auf 15 Uhr",
|
| 282 |
+
"aktiviere Nicht stören für eine Stunde",
|
| 283 |
+
"öffne Nautilus",
|
| 284 |
+
"komprimier den Ordner Fotos zu einer zip",
|
| 285 |
+
"schließ das Programm Kalender",
|
| 286 |
+
"mach das WLAN wieder an",
|
| 287 |
+
"setz die Lautstärke auf die Hälfte",
|
| 288 |
+
"öffne Visual Studio Code im Projektordner openTARS"
|
| 289 |
+
],
|
| 290 |
+
"busca": [
|
| 291 |
+
"wie ist das Wetter morgen in Berlin",
|
| 292 |
+
"was kostet die RTX 5080 gerade",
|
| 293 |
+
"wer hat gestern Bayern gegen Dortmund gewonnen",
|
| 294 |
+
"aktuelle Nachrichten aus Deutschland",
|
| 295 |
+
"Bitcoin Kurs jetzt",
|
| 296 |
+
"wann kommt GTA 6 raus",
|
| 297 |
+
"such mir ein YouTube Tutorial zum Löten",
|
| 298 |
+
"Bundesliga Tabelle aktuell",
|
| 299 |
+
"gibt es heute Stau auf der A7?",
|
| 300 |
+
"was sind die neuesten Features in Ubuntu 26.10",
|
| 301 |
+
"Testberichte zum Framework Laptop 16",
|
| 302 |
+
"wie steht es gerade im Spiel Schalke gegen HSV",
|
| 303 |
+
"wann fährt der nächste ICE von Hamburg nach München",
|
| 304 |
+
"Benzinpreise in meiner Nähe",
|
| 305 |
+
"was läuft heute Abend im Cinemaxx Dresden",
|
| 306 |
+
"was ist heute in der Welt passiert",
|
| 307 |
+
"such nach Rezensionen für das Buch 'Der Schwarm'",
|
| 308 |
+
"wie viel kostet ein Flug nach Lissabon im Oktober",
|
| 309 |
+
"wer hat die Formel 1 am Sonntag gewonnen",
|
| 310 |
+
"Euro Dollar Wechselkurs heute",
|
| 311 |
+
"regnet es heute Abend in Köln?",
|
| 312 |
+
"gibt es schon Benchmarks zum neuen Ryzen",
|
| 313 |
+
"neueste Version von Blender und was ist neu",
|
| 314 |
+
"such mir Videos, wie man einen Zauberwürfel löst",
|
| 315 |
+
"wer führt gerade bei der Bundestagswahl-Umfrage",
|
| 316 |
+
"wann spielt Deutschland das nächste Mal",
|
| 317 |
+
"such im Internet nach günstigen 4K Monitoren",
|
| 318 |
+
"Öffnungszeiten vom Baumarkt in Freiburg am Samstag",
|
| 319 |
+
"was sagen die Leute zu dem neuen Zelda-Spiel",
|
| 320 |
+
"wie hoch ist die Inflation momentan",
|
| 321 |
+
"Aktienkurs von Nvidia",
|
| 322 |
+
"gibt's Neuigkeiten zum Linux Kernel 7",
|
| 323 |
+
"Wettervorhersage für das Wochenende in Wien",
|
| 324 |
+
"Ergebnisse der Champions League gestern Abend",
|
| 325 |
+
"wo kann ich die neue Staffel von Dark streamen",
|
| 326 |
+
"was kostet ein Steam Deck OLED gerade im Angebot",
|
| 327 |
+
"finde ein Tutorial für Arch Linux Installation auf YouTube",
|
| 328 |
+
"wann ist das nächste Apple Event",
|
| 329 |
+
"suche Konzerte in Leipzig im November",
|
| 330 |
+
"welche Spiele sind diese Woche bei Epic kostenlos",
|
| 331 |
+
"wie ist der aktuelle Goldpreis",
|
| 332 |
+
"such mal nach Erfahrungen mit der Tuxedo InfinityBook",
|
| 333 |
+
"wer ist gerade Trainer beim FC Barcelona",
|
| 334 |
+
"gibt es eine Unwetterwarnung für Bayern",
|
| 335 |
+
"Release Date von Hollow Knight Silksong",
|
| 336 |
+
"was sind gerade die Top Hits in den Charts",
|
| 337 |
+
"Preisvergleich für das Samsung Galaxy S26",
|
| 338 |
+
"such nach Nachrichten über die Bahnstreiks",
|
| 339 |
+
"welche Temperatur hat es gerade in Zürich",
|
| 340 |
+
"wer hat den letzten Tatort gesehen, wie waren die Kritiken?",
|
| 341 |
+
"zeig mir Anleitungen, wie man Sauerteigbrot backt, am besten Videos",
|
| 342 |
+
"Sie könnten mir die aktuellen Börsennachrichten raussuchen",
|
| 343 |
+
"hat Mediamarkt die PS5 Pro gerade reduziert",
|
| 344 |
+
"Spielplan der NBA heute Nacht",
|
| 345 |
+
"welche neuen Distros sind diesen Monat erschienen",
|
| 346 |
+
"such eine Bewertung von dem Restaurant Zur Linde in Stuttgart",
|
| 347 |
+
"was ist beim Tennis in Wimbledon rausgekommen",
|
| 348 |
+
"Pollenflug heute",
|
| 349 |
+
"wie viele Einwohner hat Berlin laut neuesten Zahlen 2026",
|
| 350 |
+
"such nach aktuellen Jobangeboten als Linux Admin in München",
|
| 351 |
+
"wie spät ist es gerade in Tokio und wie ist das wetter dort",
|
| 352 |
+
"lohnt sich die neue Nintendo Switch laut Tests",
|
| 353 |
+
"welche Serien kommen im Oktober auf Netflix",
|
| 354 |
+
"such mal auf YouTube nach dem neuesten Video von Linus Tech Tips",
|
| 355 |
+
"Kurs der Tesla Aktie heute morgen",
|
| 356 |
+
"wer hat den Eurovision Song Contest dieses Jahr gewonnen",
|
| 357 |
+
"gibt es ein Update fuer KSP 2 oder wurde das eingestellt",
|
| 358 |
+
"was kostet Strom im Moment pro kWh im Schnitt",
|
| 359 |
+
"such mir die Patch Notes vom letzten Minecraft Update",
|
| 360 |
+
"wie war das Ergebnis vom DFB-Pokal Spiel am Mittwoch"
|
| 361 |
+
],
|
| 362 |
+
"simples": [
|
| 363 |
+
"hallo",
|
| 364 |
+
"hi tars",
|
| 365 |
+
"guten Morgen!",
|
| 366 |
+
"danke dir",
|
| 367 |
+
"vielen Dank, das hat geholfen",
|
| 368 |
+
"tschüssi, bis bald",
|
| 369 |
+
"bis später",
|
| 370 |
+
"na, alles gut bei dir?",
|
| 371 |
+
"servus beinand",
|
| 372 |
+
"moin moin",
|
| 373 |
+
"gute Nacht und danke für heute",
|
| 374 |
+
"lieben dank!",
|
| 375 |
+
"wie läuft's so?",
|
| 376 |
+
"hey",
|
| 377 |
+
"öffne google",
|
| 378 |
+
"mach mal wikipedia auf",
|
| 379 |
+
"geh auf reddit",
|
| 380 |
+
"öffne netflix",
|
| 381 |
+
"öffne gmail",
|
| 382 |
+
"bring mich zu amazon.de",
|
| 383 |
+
"öffne twitch",
|
| 384 |
+
"öffne github",
|
| 385 |
+
"geh mal auf spiegel.de",
|
| 386 |
+
"öffne whatsapp web",
|
| 387 |
+
"öffne die Seite von twitter",
|
| 388 |
+
"super, danke",
|
| 389 |
+
"alles klar, merci",
|
| 390 |
+
"ciao",
|
| 391 |
+
"bis morgen, tars",
|
| 392 |
+
"grüß dich",
|
| 393 |
+
"hallo, bist du da?",
|
| 394 |
+
"was geht?",
|
| 395 |
+
"wie geht es Ihnen heute?",
|
| 396 |
+
"guten Abend",
|
| 397 |
+
"danke, du bist der beste",
|
| 398 |
+
"top, passt so",
|
| 399 |
+
"ok cool",
|
| 400 |
+
"auf wiedersehen",
|
| 401 |
+
"hallo zusammen",
|
| 402 |
+
"tag",
|
| 403 |
+
"öffne ebay",
|
| 404 |
+
"öffne instagram",
|
| 405 |
+
"ruf chatgpt.com auf",
|
| 406 |
+
"öffne deepl.com",
|
| 407 |
+
"geh auf stackoverflow",
|
| 408 |
+
"öffne linkedin",
|
| 409 |
+
"mach google maps auf",
|
| 410 |
+
"öffne die tagesschau website",
|
| 411 |
+
"öffne outlook.com",
|
| 412 |
+
"huhu",
|
| 413 |
+
"na du",
|
| 414 |
+
"ich wünsche dir einen schönen Tag",
|
| 415 |
+
"hab einen schönen Abend",
|
| 416 |
+
"gut gemacht, danke",
|
| 417 |
+
"dankeschön für die Hilfe",
|
| 418 |
+
"hallöchen",
|
| 419 |
+
"bin wieder da",
|
| 420 |
+
"mahlzeit",
|
| 421 |
+
"gute arbeit",
|
| 422 |
+
"hey, wie geht's dir so",
|
| 423 |
+
"öffne duckduckgo",
|
| 424 |
+
"öffne facebook",
|
| 425 |
+
"öffne die seite von der bahn",
|
| 426 |
+
"öffne spotify im browser, also open.spotify.com",
|
| 427 |
+
"geh auf heise.de",
|
| 428 |
+
"tschau, bis dann",
|
| 429 |
+
"hallo tars, schön dich zu sehen",
|
| 430 |
+
"danke, das reicht erstmal",
|
| 431 |
+
"grüezi",
|
| 432 |
+
"öffne pinterest"
|
| 433 |
+
],
|
| 434 |
+
"geral": [
|
| 435 |
+
"wie wandeln Pflanzen Sonnenlicht in Energie um?",
|
| 436 |
+
"schreib ein Gedicht über den Herbst",
|
| 437 |
+
"übersetze 'Wo ist der Bahnhof?' ins Spanische",
|
| 438 |
+
"was ist 17 mal 23",
|
| 439 |
+
"fass den folgenden Text in drei Sätzen zusammen",
|
| 440 |
+
"schreib eine höfliche E-Mail an meinen Vermieter wegen der kaputten Heizung",
|
| 441 |
+
"was ist der Unterschied zwischen Wetter und Klima",
|
| 442 |
+
"gib mir fünf Ideen für ein Geburtstagsgeschenk für meine Mutter",
|
| 443 |
+
"wer hat die Relativitätstheorie entwickelt",
|
| 444 |
+
"wie viele Kontinente gibt es",
|
| 445 |
+
"erklär mir Inflation so, dass ein Kind es versteht",
|
| 446 |
+
"schreib eine kurze Geschichte über einen Roboter, der Angst im Dunkeln hat",
|
| 447 |
+
"was heißt 'serendipity' auf Deutsch",
|
| 448 |
+
"hilf mir, mich auf ein Vorstellungsgespräch vorzubereiten",
|
| 449 |
+
"wie rechne ich Prozent aus",
|
| 450 |
+
"was ist die Hauptstadt von Australien",
|
| 451 |
+
"formulier diesen Satz bitte freundlicher: Das ist falsch, mach es nochmal",
|
| 452 |
+
"gib mir Tipps, wie ich besser schlafen kann",
|
| 453 |
+
"was ist ein schwarzes Loch",
|
| 454 |
+
"schreib einen Limerick über Katzen",
|
| 455 |
+
"wie funktioniert ein Verbrennungsmotor",
|
| 456 |
+
"löse die Gleichung 3x + 7 = 22",
|
| 457 |
+
"schreib mir ein Anschreiben für eine Bewerbung als Grafikdesigner",
|
| 458 |
+
"erklär den Unterschied zwischen Dativ und Akkusativ",
|
| 459 |
+
"was war die Ursache des Ersten Weltkriegs",
|
| 460 |
+
"übersetz das ins Englische: Ich freue mich auf unser Treffen",
|
| 461 |
+
"welche Vorteile hat Meditation",
|
| 462 |
+
"denk dir einen Namen für meinen neuen Hund aus",
|
| 463 |
+
"was ergibt die Kubikwurzel aus 343",
|
| 464 |
+
"erklär mir die Evolutionstheorie",
|
| 465 |
+
"schreib ein Rezept für Pfannkuchen",
|
| 466 |
+
"wie funktioniert Zinseszins",
|
| 467 |
+
"gib mir Ideen für ein Wochenende zu Hause bei Regen",
|
| 468 |
+
"korrigier die Rechtschreibung in diesem Text",
|
| 469 |
+
"was bedeutet das Sprichwort 'Der Apfel fällt nicht weit vom Stamm'",
|
| 470 |
+
"warum ist der Himmel blau",
|
| 471 |
+
"schreib eine Absage für eine Einladung zur Hochzeit, aber nett",
|
| 472 |
+
"wie viele Tage hat ein Schaltjahr",
|
| 473 |
+
"erkläre mir den Satz des Pythagoras",
|
| 474 |
+
"schreib einen Songtext über Freundschaft",
|
| 475 |
+
"was ist der Unterschied zwischen Virus und Bakterie",
|
| 476 |
+
"wie kann ich meine Zeit besser organisieren",
|
| 477 |
+
"was ist Demokratie, kurz erklärt",
|
| 478 |
+
"übersetze 'thank you very much' ins Japanische",
|
| 479 |
+
"schreib mir eine Glückwunschkarte zur Rente",
|
| 480 |
+
"wie viele Knochen hat ein erwachsener Mensch",
|
| 481 |
+
"erklär mir, was eine Aktie ist",
|
| 482 |
+
"rechne 15 Prozent von 240 aus",
|
| 483 |
+
"gib mir ein paar Argumente für und gegen ein Tempolimit",
|
| 484 |
+
"schreib eine Produktbeschreibung für einen handgemachten Holzlöffel",
|
| 485 |
+
"was hat Goethe geschrieben, nenn mal ein paar Werke",
|
| 486 |
+
"wie entsteht ein Regenbogen",
|
| 487 |
+
"denk dir ein Rätsel für Kinder aus",
|
| 488 |
+
"erklär mal den Unterschied zwischen Kilowatt und Kilowattstunde",
|
| 489 |
+
"schreib eine Rede für die Hochzeit meines Bruders",
|
| 490 |
+
"was ist die Lichtgeschwindigkeit",
|
| 491 |
+
"hilf mir, einen Trainingsplan zum Joggen für Anfänger zu machen",
|
| 492 |
+
"wandle 100 Grad Fahrenheit in Celsius um",
|
| 493 |
+
"wer war Napoleon",
|
| 494 |
+
"schreib einen kurzen Text für meine Abwesenheitsnotiz",
|
| 495 |
+
"Sie könnten mir bitte erklären, wie Impfungen funktionieren",
|
| 496 |
+
"gib mir 10 Vokabeln auf Französisch zum Thema Essen",
|
| 497 |
+
"wie funktioniert ein Elektroauto",
|
| 498 |
+
"fasse die Handlung von Faust kurz zusammen",
|
| 499 |
+
"was ist der Unterschied zwischen seit und seid",
|
| 500 |
+
"schreib einen Witz über Programmierer",
|
| 501 |
+
"welche Planeten gibt es in unserem Sonnensystem",
|
| 502 |
+
"gib mir Tipps für ein gutes Referat",
|
| 503 |
+
"erklär mir kurz, was Quantenphysik ist",
|
| 504 |
+
"schreib einen Tweet, der mein neues Blog-Projekt ankündigt"
|
| 505 |
+
]
|
| 506 |
+
}
|
app/murph/gerado/en.json
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"visao": [
|
| 3 |
+
"what's that red dot on the top bar",
|
| 4 |
+
"click the button that says Continue",
|
| 5 |
+
"read me the error message on screen",
|
| 6 |
+
"which app is that purple icon in the dock",
|
| 7 |
+
"hit the checkbox next to 'I agree'",
|
| 8 |
+
"can u tell me what this window is showing",
|
| 9 |
+
"close the popup in the bottom right corner",
|
| 10 |
+
"there's a yellow warning triangle somewhere, what does it mean",
|
| 11 |
+
"click on the second thumbnail in the grid",
|
| 12 |
+
"what's the file name highlighted in the file manager right now",
|
| 13 |
+
"press the little trash can icon beside the first email",
|
| 14 |
+
"describe this chart for me",
|
| 15 |
+
"drag the image on the left into the folder on the right",
|
| 16 |
+
"what does the notification that just popped up say",
|
| 17 |
+
"is there a login field on this page",
|
| 18 |
+
"click the hamburger menu in the top left",
|
| 19 |
+
"what language is the text on my screen in",
|
| 20 |
+
"read the subtitles out loud",
|
| 21 |
+
"find the download button on this page and click it",
|
| 22 |
+
"what's the price shown in that product listing",
|
| 23 |
+
"press the play symbol in the middle of the video",
|
| 24 |
+
"which of these tabs has the red badge",
|
| 25 |
+
"tell me the version number written in the about box",
|
| 26 |
+
"move the slider on screen all the way to the right",
|
| 27 |
+
"click where it says 'forgot password'",
|
| 28 |
+
"what's the big number in the top corner of the dashboard",
|
| 29 |
+
"pls look at this and tell me if the form is filled correctly",
|
| 30 |
+
"i see some weird icon near the clock, what is it",
|
| 31 |
+
"click the grey X on the ad covering the page",
|
| 32 |
+
"what does the tooltip say when u hover over that",
|
| 33 |
+
"select the text in the first paragraph",
|
| 34 |
+
"is that button greyed out or can i click it",
|
| 35 |
+
"what's written in the terminal window right now",
|
| 36 |
+
"right click on the green file icon",
|
| 37 |
+
"how many unread messages does the chat window show",
|
| 38 |
+
"press ok on the dialog box",
|
| 39 |
+
"which song is in the spotify window at the moment, just read it",
|
| 40 |
+
"click the star next to the repo name",
|
| 41 |
+
"what are the column headers in this spreadsheet",
|
| 42 |
+
"look at the screen, did the upload finish?",
|
| 43 |
+
"tick all the boxes in that list",
|
| 44 |
+
"click the avatar picture in the upper right",
|
| 45 |
+
"what's the temperature displayed on the widget",
|
| 46 |
+
"can you read the captcha text",
|
| 47 |
+
"hover over the chart and tell me the highest value",
|
| 48 |
+
"click the link at the very bottom of the page",
|
| 49 |
+
"whats this blue banner at the top about",
|
| 50 |
+
"expand the dropdown under the search box",
|
| 51 |
+
"which button do i press to save here? just click it",
|
| 52 |
+
"what does the red text under the password field say",
|
| 53 |
+
"summarize what's on this web page i'm looking at",
|
| 54 |
+
"tap the arrow pointing down next to 'Sort by'",
|
| 55 |
+
"what's the time in the corner of the screen",
|
| 56 |
+
"click on the orange folder",
|
| 57 |
+
"read the first three lines in the document that's open",
|
| 58 |
+
"double-click the icon shaped like a camera",
|
| 59 |
+
"is my face visible in the webcam preview window",
|
| 60 |
+
"close the third tab from the left",
|
| 61 |
+
"click the toggle switch that's currently off",
|
| 62 |
+
"describe the photo that's being displayed",
|
| 63 |
+
"what's the name of the person in the video call tile at the top",
|
| 64 |
+
"click the button under the image",
|
| 65 |
+
"what's the error code on that blue screen thing",
|
| 66 |
+
"scroll until you see the comments section and read the top one",
|
| 67 |
+
"press the icon that looks like a gear with a wrench",
|
| 68 |
+
"which option is selected in that radio group",
|
| 69 |
+
"drag the scrollbar halfway down",
|
| 70 |
+
"there's a message in the lower left corner, what is it",
|
| 71 |
+
"point at the menu item that says Preferences and click it",
|
| 72 |
+
"what does the graph on my screen show about sales"
|
| 73 |
+
],
|
| 74 |
+
"codigo": [
|
| 75 |
+
"write a python function to check if a number is prime",
|
| 76 |
+
"my rust code says borrowed value does not live long enough, help",
|
| 77 |
+
"explain recursion with a simple example in js",
|
| 78 |
+
"how do i reverse a string in java",
|
| 79 |
+
"why do i get NameError: name 'df' is not defined",
|
| 80 |
+
"write a sql query that counts orders per customer",
|
| 81 |
+
"refactor this function so it's less nested",
|
| 82 |
+
"whats the difference between let and const",
|
| 83 |
+
"make a flask endpoint that returns json",
|
| 84 |
+
"my kotlin app crashes with NullPointerException on startup",
|
| 85 |
+
"how do promises work in javascript",
|
| 86 |
+
"convert this for loop to use map",
|
| 87 |
+
"write unit tests for my calculator class with pytest",
|
| 88 |
+
"what is big O notation",
|
| 89 |
+
"my css flexbox items won't center vertically",
|
| 90 |
+
"write a regex that matches email addresses",
|
| 91 |
+
"how do i handle exceptions in c#",
|
| 92 |
+
"explain what async await does",
|
| 93 |
+
"write a c program that reads a file line by line",
|
| 94 |
+
"my django migration fails with 'no such column'",
|
| 95 |
+
"implement binary search in go",
|
| 96 |
+
"how do i use useEffect without it running in a loop",
|
| 97 |
+
"what's a pointer in c, explain like i'm new",
|
| 98 |
+
"write a bash script that renames all .jpeg files to .jpg",
|
| 99 |
+
"why does 0.1 + 0.2 not equal 0.3 in my program",
|
| 100 |
+
"generate a dockerfile for a node express app",
|
| 101 |
+
"my swift closure captures self strongly, how do i fix it",
|
| 102 |
+
"add type hints to this python function",
|
| 103 |
+
"write a function that flattens a nested list",
|
| 104 |
+
"how do i connect to postgres from python",
|
| 105 |
+
"explain dependency injection",
|
| 106 |
+
"my git merge conflict markers are in the code, how do i resolve them in the file",
|
| 107 |
+
"write a simple snake game in pygame",
|
| 108 |
+
"how do i read json from an api in javascript",
|
| 109 |
+
"what does 'undefined is not a function' mean",
|
| 110 |
+
"write a lua script for a roblox door that opens on touch",
|
| 111 |
+
"optimize this query, it takes 10 seconds",
|
| 112 |
+
"what's the difference between an interface and an abstract class",
|
| 113 |
+
"make a python script that sends an email with smtplib",
|
| 114 |
+
"my for loop in php only runs once",
|
| 115 |
+
"how to memoize a function in python",
|
| 116 |
+
"write a hello world in assembly",
|
| 117 |
+
"why is my react state not updating right away",
|
| 118 |
+
"explain what a hash map is and when to use it",
|
| 119 |
+
"convert this python 2 code to python 3",
|
| 120 |
+
"write a class for a bank account with deposit and withdraw",
|
| 121 |
+
"my arduino sketch doesnt compile, 'expected ; before }'",
|
| 122 |
+
"how do i split a string by comma in c++",
|
| 123 |
+
"write a quick script to download all images from a list of urls",
|
| 124 |
+
"explain the observer pattern with code",
|
| 125 |
+
"my java stream collect returns null, why",
|
| 126 |
+
"write a vue component with a counter button",
|
| 127 |
+
"what does the yield keyword do in python",
|
| 128 |
+
"write a function to validate a brazilian cpf number",
|
| 129 |
+
"segmentation fault when i free this pointer twice?",
|
| 130 |
+
"how do i write a makefile for two c files",
|
| 131 |
+
"turn this callback code into async/await",
|
| 132 |
+
"what are generics in typescript",
|
| 133 |
+
"write a shell function that prints the largest file in a directory",
|
| 134 |
+
"my unity c# script can't find the component",
|
| 135 |
+
"implement a linked list in python",
|
| 136 |
+
"why does my websocket server close the connection immediately",
|
| 137 |
+
"write a godot gdscript for player movement",
|
| 138 |
+
"explain the difference between == and === in js",
|
| 139 |
+
"my pandas groupby gives a warning about SettingWithCopy",
|
| 140 |
+
"write a minimal rest api in fastapi with one GET route",
|
| 141 |
+
"how can I debounce an input handler",
|
| 142 |
+
"explain how a mutex prevents race conditions in code",
|
| 143 |
+
"write a python script to parse a log file and count errors",
|
| 144 |
+
"fix the indentation error in this snippet"
|
| 145 |
+
],
|
| 146 |
+
"tecnico": [
|
| 147 |
+
"wifi won't connect since the last update on pop os",
|
| 148 |
+
"how do i install steam on arch",
|
| 149 |
+
"my second monitor isn't detected on ubuntu",
|
| 150 |
+
"what does sudo actually do",
|
| 151 |
+
"grub doesn't show windows anymore after installing linux",
|
| 152 |
+
"how can i see how much ram is being used from the terminal",
|
| 153 |
+
"bluetooth headset connects but no sound on fedora",
|
| 154 |
+
"apt says unable to locate package, why",
|
| 155 |
+
"how do i uninstall a snap",
|
| 156 |
+
"linux mint boots to a black screen",
|
| 157 |
+
"what's the difference between apt and flatpak",
|
| 158 |
+
"my fans are super loud all the time on linux, how to fix",
|
| 159 |
+
"how do i make a program start automatically at login on kde",
|
| 160 |
+
"dpkg was interrupted, you must manually run dpkg --configure -a what does that mean",
|
| 161 |
+
"how to update everything on manjaro",
|
| 162 |
+
"my keyboard layout keeps resetting to us after reboot",
|
| 163 |
+
"what is the /etc/fstab file for",
|
| 164 |
+
"how do i check if my gpu drivers are installed",
|
| 165 |
+
"pacman keeps failing with invalid signature",
|
| 166 |
+
"how do i find large files eating my disk",
|
| 167 |
+
"explain what a linux distro is",
|
| 168 |
+
"my usb stick shows as read only on linux",
|
| 169 |
+
"the lock screen doesn't come back after suspend",
|
| 170 |
+
"how do i add a user to the sudo group",
|
| 171 |
+
"can't hear anything through hdmi on debian",
|
| 172 |
+
"what's pipewire and do i need it",
|
| 173 |
+
"how to enable ssh server on ubuntu",
|
| 174 |
+
"my printer isn't showing up in linux",
|
| 175 |
+
"how do i change the hostname permanently",
|
| 176 |
+
"brightness keys don't work on my laptop with linux",
|
| 177 |
+
"what does 'permission denied' mean when i run a script",
|
| 178 |
+
"how do i install a .deb file",
|
| 179 |
+
"cron job isn't running, how do i debug it",
|
| 180 |
+
"the clock is wrong after dual booting with windows",
|
| 181 |
+
"how do i kill a frozen program from the terminal",
|
| 182 |
+
"explain the linux file permissions rwx thing",
|
| 183 |
+
"how to install ollama on linux",
|
| 184 |
+
"nvidia driver broke after kernel update, now stuck at login loop",
|
| 185 |
+
"how do i list all installed packages on fedora",
|
| 186 |
+
"what does the tilde ~ mean in a path",
|
| 187 |
+
"my webcam isn't recognized by linux",
|
| 188 |
+
"how can i make a bootable usb from the terminal with dd",
|
| 189 |
+
"why is my linux boot so slow, it takes 2 minutes",
|
| 190 |
+
"how do i roll back to the previous kernel",
|
| 191 |
+
"gnome extensions stopped working after upgrade",
|
| 192 |
+
"how to set environment variables permanently in bash",
|
| 193 |
+
"my mic is way too quiet on linux",
|
| 194 |
+
"what's the difference between root and my normal user",
|
| 195 |
+
"journalctl shows a lot of errors, how do i read it",
|
| 196 |
+
"how do I install an appimage properly",
|
| 197 |
+
"i accidentally deleted my panel in xfce, how do i get it back",
|
| 198 |
+
"what is swap and how much should i have",
|
| 199 |
+
"how do i open ports in ufw",
|
| 200 |
+
"my laptop battery drains fast on linux, any fix",
|
| 201 |
+
"how do i see what's connected to my network from terminal",
|
| 202 |
+
"how do i update the bios firmware with fwupd",
|
| 203 |
+
"what does the command ls -la show",
|
| 204 |
+
"sound crackles when playing games on linux",
|
| 205 |
+
"how to install java on ubuntu 24.04",
|
| 206 |
+
"after the upgrade, my external drive won't mount, says wrong fs type",
|
| 207 |
+
"how do I switch from wayland to xorg at login",
|
| 208 |
+
"explain what systemctl enable does",
|
| 209 |
+
"why does my wifi adapter not show up at all",
|
| 210 |
+
"how do i change the default app for pdfs in linux",
|
| 211 |
+
"hibernate option is missing in the power menu",
|
| 212 |
+
"how do i reinstall the desktop environment without losing files",
|
| 213 |
+
"what is a package manager",
|
| 214 |
+
"how do i check cpu temperature on linux",
|
| 215 |
+
"steam games won't launch, proton error",
|
| 216 |
+
"my touchscreen is inverted on linux, how to recalibrate"
|
| 217 |
+
],
|
| 218 |
+
"acao": [
|
| 219 |
+
"open spotify",
|
| 220 |
+
"turn off wifi",
|
| 221 |
+
"volume up",
|
| 222 |
+
"set the volume to 50",
|
| 223 |
+
"enable dark mode",
|
| 224 |
+
"close telegram",
|
| 225 |
+
"take a screenshot",
|
| 226 |
+
"turn bluetooth on pls",
|
| 227 |
+
"move report.pdf to the documents folder",
|
| 228 |
+
"launch vs code",
|
| 229 |
+
"shut down the computer",
|
| 230 |
+
"mute my microphone",
|
| 231 |
+
"increase brightness a bit",
|
| 232 |
+
"open the terminal",
|
| 233 |
+
"delete old_backup.zip from downloads",
|
| 234 |
+
"send 'running late, be there in 10' to john on telegram",
|
| 235 |
+
"create a folder called projects in my home",
|
| 236 |
+
"open discord and go to the general channel",
|
| 237 |
+
"switch off bluetooth",
|
| 238 |
+
"put the computer to sleep",
|
| 239 |
+
"rename draft.docx to final.docx",
|
| 240 |
+
"open libreoffice writer",
|
| 241 |
+
"type 'hello world' in the text editor",
|
| 242 |
+
"close all firefox windows",
|
| 243 |
+
"turn the volume all the way down",
|
| 244 |
+
"start obs",
|
| 245 |
+
"log me out",
|
| 246 |
+
"reboot now",
|
| 247 |
+
"open steam",
|
| 248 |
+
"disable notifications",
|
| 249 |
+
"turn on do not disturb",
|
| 250 |
+
"copy budget.xlsx to the usb stick",
|
| 251 |
+
"move all mp3s from downloads to music",
|
| 252 |
+
"open thunderbird and write an email to maria",
|
| 253 |
+
"skip this song",
|
| 254 |
+
"set brightness to 100%",
|
| 255 |
+
"open gimp",
|
| 256 |
+
"minimize all windows",
|
| 257 |
+
"launch blender pls",
|
| 258 |
+
"kill the chrome process",
|
| 259 |
+
"take a screenshot of just the current window",
|
| 260 |
+
"open the downloads folder",
|
| 261 |
+
"turn airplane mode on",
|
| 262 |
+
"open settings",
|
| 263 |
+
"unmute",
|
| 264 |
+
"send a whatsapp message to mom saying i'm home",
|
| 265 |
+
"create a text file named todo.txt on the desktop",
|
| 266 |
+
"close vlc",
|
| 267 |
+
"open the photos app",
|
| 268 |
+
"turn dark mode off",
|
| 269 |
+
"change the wallpaper to the beach picture in pictures",
|
| 270 |
+
"open keepassxc",
|
| 271 |
+
"extract archive.tar.gz in downloads",
|
| 272 |
+
"turn on the night light",
|
| 273 |
+
"connect to the wifi called HomeNet",
|
| 274 |
+
"pause the video in vlc",
|
| 275 |
+
"open a new terminal tab",
|
| 276 |
+
"schedule a shutdown for 11pm",
|
| 277 |
+
"delete everything in the trash",
|
| 278 |
+
"switch to workspace 2",
|
| 279 |
+
"open nautilus in the pictures folder",
|
| 280 |
+
"lower the brightness to 20 percent",
|
| 281 |
+
"open obsidian",
|
| 282 |
+
"close the calculator",
|
| 283 |
+
"put my headset as the default audio output",
|
| 284 |
+
"start a screen recording",
|
| 285 |
+
"open krita",
|
| 286 |
+
"type my email address in the focused field: joe@mail.com",
|
| 287 |
+
"quit slack",
|
| 288 |
+
"hey open the system monitor"
|
| 289 |
+
],
|
| 290 |
+
"busca": [
|
| 291 |
+
"bitcoin price now",
|
| 292 |
+
"who won the champions league final this year",
|
| 293 |
+
"weather in curitiba this weekend",
|
| 294 |
+
"latest news on the linux kernel 7.0",
|
| 295 |
+
"when does gta 6 come out",
|
| 296 |
+
"how much is an rtx 5090 right now",
|
| 297 |
+
"find me a tutorial on installing arch linux",
|
| 298 |
+
"flamengo score today",
|
| 299 |
+
"reviews of the framework laptop 16",
|
| 300 |
+
"what's trending on twitter today",
|
| 301 |
+
"dollar to real exchange rate today",
|
| 302 |
+
"search youtube for lofi hip hop",
|
| 303 |
+
"show me the latest spacex launch results",
|
| 304 |
+
"is it gonna rain tomorrow in são paulo",
|
| 305 |
+
"what time is the f1 race on sunday",
|
| 306 |
+
"best budget mechanical keyboards 2026",
|
| 307 |
+
"new episodes of the bear release date",
|
| 308 |
+
"any news about the ps6",
|
| 309 |
+
"cheapest flights to lisbon in december",
|
| 310 |
+
"who won the election in germany",
|
| 311 |
+
"current price of a 2tb nvme ssd",
|
| 312 |
+
"what's the latest version of blender",
|
| 313 |
+
"find a video on how to change a car tire",
|
| 314 |
+
"top headlines today in brazil",
|
| 315 |
+
"nba standings",
|
| 316 |
+
"search for restaurants open now near me",
|
| 317 |
+
"what did apple announce at the last event",
|
| 318 |
+
"is discord down right now",
|
| 319 |
+
"how much does netflix cost per month now",
|
| 320 |
+
"find reviews for the new kindle",
|
| 321 |
+
"latest version of python released",
|
| 322 |
+
"what's the ethereum price",
|
| 323 |
+
"results of the brazilian league round yesterday",
|
| 324 |
+
"search the web for fedora 45 release notes",
|
| 325 |
+
"is there a new ubuntu lts out",
|
| 326 |
+
"hotel prices in florianópolis for next weekend",
|
| 327 |
+
"who is leading the tour de france",
|
| 328 |
+
"what's the air quality in beijing today",
|
| 329 |
+
"look up the ratings for dune part three",
|
| 330 |
+
"what movies come out next month",
|
| 331 |
+
"find a good guide to setting up hyprland",
|
| 332 |
+
"stock price of nvidia",
|
| 333 |
+
"what happened in the news this morning",
|
| 334 |
+
"has the new zelda been announced yet",
|
| 335 |
+
"search for a recipe video for brigadeiro",
|
| 336 |
+
"when is the next full moon",
|
| 337 |
+
"weather forecast for the next 7 days in francisco beltrão",
|
| 338 |
+
"who scored in the palmeiras game",
|
| 339 |
+
"find the steam summer sale dates",
|
| 340 |
+
"what's the latest on the mars mission",
|
| 341 |
+
"prices for a used ps5 on mercado livre",
|
| 342 |
+
"find me benchmarks for the ryzen 9 9950x3d",
|
| 343 |
+
"when is the next world cup qualifier for brazil",
|
| 344 |
+
"look up opening hours for the city library",
|
| 345 |
+
"any new ksp 2 updates",
|
| 346 |
+
"latest openai model announcement",
|
| 347 |
+
"search for a free online course on machine learning",
|
| 348 |
+
"top 10 songs on spotify this week",
|
| 349 |
+
"how's the stock market doing today",
|
| 350 |
+
"what's the price of gas in paraná now",
|
| 351 |
+
"find tutorials for learning godot",
|
| 352 |
+
"who won the oscar for best picture this year",
|
| 353 |
+
"check the ufc results from saturday",
|
| 354 |
+
"search google for cheap monitors 144hz",
|
| 355 |
+
"find the changelog for the latest firefox",
|
| 356 |
+
"what's the traffic like on br-277 now",
|
| 357 |
+
"current mortgage interest rates",
|
| 358 |
+
"is the new macbook pro worth it, find reviews",
|
| 359 |
+
"look for tickets to the coldplay concert",
|
| 360 |
+
"find out if the store has the 4070 super in stock"
|
| 361 |
+
],
|
| 362 |
+
"simples": [
|
| 363 |
+
"hi claude, you there",
|
| 364 |
+
"hello hello",
|
| 365 |
+
"good morning!",
|
| 366 |
+
"thanks a lot",
|
| 367 |
+
"bye",
|
| 368 |
+
"see ya later",
|
| 369 |
+
"heyyy tars",
|
| 370 |
+
"open youtube",
|
| 371 |
+
"open reddit",
|
| 372 |
+
"thank u so much",
|
| 373 |
+
"good night",
|
| 374 |
+
"yo whats up",
|
| 375 |
+
"how r u",
|
| 376 |
+
"open github",
|
| 377 |
+
"nice, thanks",
|
| 378 |
+
"open wikipedia",
|
| 379 |
+
"cheers mate",
|
| 380 |
+
"hey buddy how's your day",
|
| 381 |
+
"open amazon",
|
| 382 |
+
"ok cool",
|
| 383 |
+
"good afternoon, tars",
|
| 384 |
+
"open facebook",
|
| 385 |
+
"thx",
|
| 386 |
+
"hello, anyone there?",
|
| 387 |
+
"open google",
|
| 388 |
+
"catch you later",
|
| 389 |
+
"open whatsapp web",
|
| 390 |
+
"awesome thank you",
|
| 391 |
+
"hey hey",
|
| 392 |
+
"open linkedin",
|
| 393 |
+
"you're the best",
|
| 394 |
+
"open twitch",
|
| 395 |
+
"sup",
|
| 396 |
+
"have a nice day",
|
| 397 |
+
"open spotify website",
|
| 398 |
+
"howdy",
|
| 399 |
+
"open outlook.com",
|
| 400 |
+
"great job, thanks",
|
| 401 |
+
"talk to you tomorrow",
|
| 402 |
+
"open duckduckgo",
|
| 403 |
+
"hiya",
|
| 404 |
+
"perfect, that's all",
|
| 405 |
+
"open pinterest",
|
| 406 |
+
"morning tars",
|
| 407 |
+
"ty",
|
| 408 |
+
"open tiktok",
|
| 409 |
+
"evening!",
|
| 410 |
+
"take care",
|
| 411 |
+
"open chatgpt website",
|
| 412 |
+
"hey, how have you been?",
|
| 413 |
+
"open the youtube site pls",
|
| 414 |
+
"thanks, that helped",
|
| 415 |
+
"open mercado livre",
|
| 416 |
+
"hello friend",
|
| 417 |
+
"nvm, bye",
|
| 418 |
+
"open google maps",
|
| 419 |
+
"what's new with you",
|
| 420 |
+
"open stack overflow",
|
| 421 |
+
"cool beans",
|
| 422 |
+
"much appreciated, really",
|
| 423 |
+
"open imdb",
|
| 424 |
+
"goodbye tars",
|
| 425 |
+
"hello again, it's me",
|
| 426 |
+
"open the bbc website",
|
| 427 |
+
"alright, thanks mate",
|
| 428 |
+
"open google drive",
|
| 429 |
+
"hi, nice to meet you",
|
| 430 |
+
"open tradingview",
|
| 431 |
+
"lol ok",
|
| 432 |
+
"open google translate"
|
| 433 |
+
],
|
| 434 |
+
"geral": [
|
| 435 |
+
"explain photosynthesis simply",
|
| 436 |
+
"write a poem about autumn",
|
| 437 |
+
"translate 'good luck' into spanish",
|
| 438 |
+
"what's 17 times 23",
|
| 439 |
+
"give me themes for a kid's birthday party",
|
| 440 |
+
"write an email asking my boss for a day off",
|
| 441 |
+
"summarize the story of the odyssey",
|
| 442 |
+
"what is the theory of relativity",
|
| 443 |
+
"how does a black hole form",
|
| 444 |
+
"suggest names for a pet cat",
|
| 445 |
+
"what's the capital of australia",
|
| 446 |
+
"tips for sleeping better",
|
| 447 |
+
"write a short story about a robot who learns to paint",
|
| 448 |
+
"explain inflation like i'm 10",
|
| 449 |
+
"how many bones are in the human body",
|
| 450 |
+
"help me write a cover letter for a barista job",
|
| 451 |
+
"what's the difference between a virus and bacteria",
|
| 452 |
+
"convert 5 miles to kilometers",
|
| 453 |
+
"what does 'carpe diem' mean",
|
| 454 |
+
"give me a workout plan for beginners",
|
| 455 |
+
"who wrote pride and prejudice",
|
| 456 |
+
"write a haiku about coffee",
|
| 457 |
+
"how do airplanes stay in the air",
|
| 458 |
+
"what's a good way to learn a new language",
|
| 459 |
+
"translate this to portuguese: see you next week",
|
| 460 |
+
"solve 2x + 5 = 17",
|
| 461 |
+
"why is the sky blue",
|
| 462 |
+
"what are the rules of chess castling",
|
| 463 |
+
"write a thank you note to my teacher",
|
| 464 |
+
"what caused world war 1",
|
| 465 |
+
"ideas for a sci-fi novel plot",
|
| 466 |
+
"how do i make a good first impression at an interview",
|
| 467 |
+
"explain what dna is",
|
| 468 |
+
"what's the plural of cactus",
|
| 469 |
+
"write a limerick about a lazy dog",
|
| 470 |
+
"what's the boiling point of water in fahrenheit",
|
| 471 |
+
"how does compound interest work",
|
| 472 |
+
"give me 5 fun facts about octopuses",
|
| 473 |
+
"proofread this: their going to the store tomorow",
|
| 474 |
+
"what's the difference between affect and effect",
|
| 475 |
+
"write a toast for my brother's wedding",
|
| 476 |
+
"explain the water cycle",
|
| 477 |
+
"how long does it take light from the sun to reach earth",
|
| 478 |
+
"what's a synonym for happy",
|
| 479 |
+
"give me a recipe for banana bread",
|
| 480 |
+
"how do i politely decline an invitation",
|
| 481 |
+
"what's the area of a circle with radius 4",
|
| 482 |
+
"explain supply and demand",
|
| 483 |
+
"who discovered penicillin",
|
| 484 |
+
"write a product description for handmade candles",
|
| 485 |
+
"what's stoicism about",
|
| 486 |
+
"help me plan a weekly budget",
|
| 487 |
+
"how do vaccines work",
|
| 488 |
+
"what's the tallest mountain in the world",
|
| 489 |
+
"rewrite this sentence to sound more formal: gimme the report asap",
|
| 490 |
+
"give me conversation starters for a first date",
|
| 491 |
+
"how many minutes are in a week",
|
| 492 |
+
"explain how a neural network learns, conceptually",
|
| 493 |
+
"what's the meaning of the idiom 'break the ice'",
|
| 494 |
+
"write lyrics for a funny song about mondays",
|
| 495 |
+
"tell me a joke",
|
| 496 |
+
"what's the largest ocean",
|
| 497 |
+
"how should i study for a math exam",
|
| 498 |
+
"summarize the main ideas of the prince by machiavelli",
|
| 499 |
+
"translate 'thank you very much' into japanese",
|
| 500 |
+
"what's the difference between a latte and a cappuccino",
|
| 501 |
+
"give me a list of classic books everyone should read",
|
| 502 |
+
"why do cats knead blankets",
|
| 503 |
+
"write a motivational message for my team",
|
| 504 |
+
"is a tomato a fruit or a vegetable"
|
| 505 |
+
]
|
| 506 |
+
}
|
app/murph/gerado/es.json
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"visao": [
|
| 3 |
+
"pulsa el botón verde que sale abajo a la derecha",
|
| 4 |
+
"¿qué pone en la notificación que acaba de salir?",
|
| 5 |
+
"lee lo que hay escrito en esta ventana",
|
| 6 |
+
"describe la imagen que tengo abierta",
|
| 7 |
+
"haz clic en la X roja de arriba",
|
| 8 |
+
"cierra esa ventanita que me salió en medio de la pantalla",
|
| 9 |
+
"que dice el mensaje de error que aparece",
|
| 10 |
+
"dale al icono con forma de engranaje",
|
| 11 |
+
"¿de qué color es el fondo de mi escritorio?",
|
| 12 |
+
"arrastra ese archivo amarillo a la carpeta de al lado",
|
| 13 |
+
"clickea en el enlace azul subrayado",
|
| 14 |
+
"cuántas pestañas tengo abiertas en el navegador, míralas",
|
| 15 |
+
"qué hay en la esquina superior izquierda",
|
| 16 |
+
"léeme el texto del cuadro de diálogo",
|
| 17 |
+
"pincha en la tercera foto de la fila",
|
| 18 |
+
"toca el botón que parece una lupa",
|
| 19 |
+
"dime qué gráfico se ve en la hoja de cálculo",
|
| 20 |
+
"qué número sale en la celda resaltada",
|
| 21 |
+
"¿me lees el subtítulo que está en el vídeo?",
|
| 22 |
+
"presiona el botón de play que se ve en el centro",
|
| 23 |
+
"selecciona la palabra que está en negrita en el documento",
|
| 24 |
+
"qué app es la del icono morado en el dock",
|
| 25 |
+
"fíjate si hay algún aviso rojo en la barra de tareas",
|
| 26 |
+
"¿qué hora marca el reloj de la pantalla?",
|
| 27 |
+
"dale clic al boton ese de continuar que esta abajo",
|
| 28 |
+
"revisa la pantalla y dime si terminó la descarga",
|
| 29 |
+
"lee el captcha que me sale por favor",
|
| 30 |
+
"mueve la ventana de la izquierda hacia la derecha",
|
| 31 |
+
"cierra la pestaña que está parpadeando",
|
| 32 |
+
"qué dice el correo que tengo abierto",
|
| 33 |
+
"haz doble clic en la carpeta con el nombre en rojo",
|
| 34 |
+
"mira este formulario y dime qué campos me faltan",
|
| 35 |
+
"¿qué tiene de raro esta página que estoy viendo?",
|
| 36 |
+
"aprieta el iconito de la campana arriba",
|
| 37 |
+
"cuál es el precio que sale en esta página de la tienda",
|
| 38 |
+
"¿qué error marca el terminal en rojo?",
|
| 39 |
+
"describe lo que está pasando en el video pausado",
|
| 40 |
+
"mira el mapa en pantalla y dime en qué calle está el punto",
|
| 41 |
+
"dale al tercer botón de la barra de herramientas",
|
| 42 |
+
"qué nombre tiene el usuario que me escribió en el chat que está abierto",
|
| 43 |
+
"toca la flechita que apunta hacia abajo",
|
| 44 |
+
"lee en voz alta el párrafo seleccionado",
|
| 45 |
+
"qué hay detrás de esta ventana, echa un vistazo",
|
| 46 |
+
"marca la casilla que está vacía",
|
| 47 |
+
"hazle click al banner de arriba para cerrarlo",
|
| 48 |
+
"¿qué porcentaje de batería muestra el indicador?",
|
| 49 |
+
"elige la opción que está en gris",
|
| 50 |
+
"dime qué dice el cartelito amarillo",
|
| 51 |
+
"¿se ve bien alineado el texto de mi presentación?",
|
| 52 |
+
"arrastra el deslizador rojo hasta la mitad",
|
| 53 |
+
"pulsa en el avatar redondo de la esquina",
|
| 54 |
+
"q pone en la ventana esa",
|
| 55 |
+
"mira la pantalla y ayudame a encontrar el botón de guardar",
|
| 56 |
+
"¿cuál de los iconos del escritorio es el más grande?",
|
| 57 |
+
"haz scroll hasta donde aparece la tabla y léemela",
|
| 58 |
+
"pincha el botón naranja que dice algo de suscribirse",
|
| 59 |
+
"que ves en la segunda pantalla",
|
| 60 |
+
"cuenta cuántos archivos hay en la carpeta que estoy viendo",
|
| 61 |
+
"dale al menú de las tres rayitas",
|
| 62 |
+
"mira qué canal está puesto en la tele del stream",
|
| 63 |
+
"lee la fecha que aparece en la factura abierta",
|
| 64 |
+
"cierra el popup de cookies que tapa la página",
|
| 65 |
+
"¿qué emoji me mandaron en el último mensaje visible?",
|
| 66 |
+
"toca el cuadrado de abajo del todo",
|
| 67 |
+
"¿ves algún error en el código que tengo en pantalla?",
|
| 68 |
+
"haz click donde dice aceptar términos",
|
| 69 |
+
"cuál es el título de la pestaña activa",
|
| 70 |
+
"mira la ventana del juego y dime cuánta vida me queda",
|
| 71 |
+
"señálame dónde está el cursor ahora",
|
| 72 |
+
"pulsa el símbolo de más que está al lado del nombre"
|
| 73 |
+
],
|
| 74 |
+
"codigo": [
|
| 75 |
+
"escríbeme una función en python que invierta una cadena",
|
| 76 |
+
"por qué me da NullPointerException este método en java",
|
| 77 |
+
"cómo hago un bucle for en javascript que recorra un array",
|
| 78 |
+
"arregla este script de bash que no lee bien los argumentos",
|
| 79 |
+
"qué diferencia hay entre let y const en JS",
|
| 80 |
+
"hazme un programa en C que calcule el factorial",
|
| 81 |
+
"mi código en rust no compila por el borrow checker, ayuda",
|
| 82 |
+
"explícame qué es la recursividad con un ejemplo en código",
|
| 83 |
+
"cómo leo un archivo CSV con pandas",
|
| 84 |
+
"escribe una clase Persona en TypeScript con nombre y edad",
|
| 85 |
+
"tengo un segfault en mi programa de C++, qué puede ser",
|
| 86 |
+
"cómo hago una petición HTTP con requests en python",
|
| 87 |
+
"qué significa el error \"undefined is not a function\"",
|
| 88 |
+
"dame un ejemplo de async await en javascript",
|
| 89 |
+
"crea una API REST sencilla con Flask",
|
| 90 |
+
"cómo ordeno una lista de diccionarios por una clave en python",
|
| 91 |
+
"optimiza esta consulta SQL que tarda mucho",
|
| 92 |
+
"por que mi useEffect se ejecuta infinitas veces en react",
|
| 93 |
+
"escribe un regex que valide emails",
|
| 94 |
+
"qué es un puntero en C, explícamelo fácil",
|
| 95 |
+
"convierte este código de python a go",
|
| 96 |
+
"hazme un script que renombre todas las fotos de una carpeta con la fecha",
|
| 97 |
+
"mi función devuelve None y no sé por qué",
|
| 98 |
+
"cómo se usa git rebase en mi repo sin romper nada",
|
| 99 |
+
"escribe tests unitarios con pytest para esta función",
|
| 100 |
+
"qué patrón de diseño uso para un sistema de plugins",
|
| 101 |
+
"error IndentationError: unexpected indent, qué hago",
|
| 102 |
+
"cómo declaro un diccionario en C#",
|
| 103 |
+
"programa un juego de piedra papel o tijera en python",
|
| 104 |
+
"qué hace el operador ternario en php",
|
| 105 |
+
"cómo evito inyección sql en mi código de node",
|
| 106 |
+
"refactoriza esta función que tiene demasiados if",
|
| 107 |
+
"explícame las list comprehension de python",
|
| 108 |
+
"hazme un componente de React que muestre un contador",
|
| 109 |
+
"por qué mi variable sale como NaN en js",
|
| 110 |
+
"cómo conecto mi app de python a una base de datos postgres",
|
| 111 |
+
"escribe una función que diga si un número es primo",
|
| 112 |
+
"que es la complejidad O(n log n) en algoritmos",
|
| 113 |
+
"mi programa en kotlin se cierra al girar la pantalla",
|
| 114 |
+
"cómo hago un scraper con BeautifulSoup",
|
| 115 |
+
"dame el código para dibujar un círculo con pygame",
|
| 116 |
+
"qué es un closure en javascript",
|
| 117 |
+
"ayúdame con este error de TypeError: 'int' object is not iterable",
|
| 118 |
+
"crea un Dockerfile para mi aplicación de node",
|
| 119 |
+
"cómo paso argumentos por línea de comandos a un script de python con argparse",
|
| 120 |
+
"implementa una pila en java",
|
| 121 |
+
"por qué mi CSS no centra el div",
|
| 122 |
+
"escribe una función lambda que sume dos números",
|
| 123 |
+
"qué diferencia hay entre una lista y una tupla en python",
|
| 124 |
+
"mi bucle while no termina nunca, mira el código",
|
| 125 |
+
"cómo manejo excepciones en java con try catch",
|
| 126 |
+
"hazme un script en python que mande un correo con smtplib",
|
| 127 |
+
"que significa el warning unused variable en mi compilador",
|
| 128 |
+
"genera un JSON schema para este objeto",
|
| 129 |
+
"explica qué hace este fragmento de código de haskell",
|
| 130 |
+
"cómo hago herencia en python",
|
| 131 |
+
"necesito un algoritmo de búsqueda binaria en c++",
|
| 132 |
+
"mi app de flutter no muestra la imagen del asset",
|
| 133 |
+
"escribe un makefile para compilar estos tres archivos .c",
|
| 134 |
+
"por qué git me dice merge conflict en mi archivo main.py",
|
| 135 |
+
"cómo uso map filter y reduce en js",
|
| 136 |
+
"crea una función que cuente las vocales de un texto",
|
| 137 |
+
"qué es la inyección de dependencias en programación",
|
| 138 |
+
"arregla el off-by-one de mi bucle",
|
| 139 |
+
"cómo lanzo hilos en python con threading",
|
| 140 |
+
"hazme un script de lua para mi mod que spawnee un objeto",
|
| 141 |
+
"qué hace el decorador @property",
|
| 142 |
+
"mi programa en go da deadlock con los canales",
|
| 143 |
+
"escribe un programa que lea números del usuario y saque la media",
|
| 144 |
+
"como se hace un hola mundo en ensamblador"
|
| 145 |
+
],
|
| 146 |
+
"tecnico": [
|
| 147 |
+
"el wifi dejó de funcionar después de actualizar ubuntu",
|
| 148 |
+
"cómo instalo steam en fedora",
|
| 149 |
+
"no me detecta la tarjeta gráfica nvidia en linux mint",
|
| 150 |
+
"qué hace el comando chmod 755",
|
| 151 |
+
"mi portátil no suspende bien en arch, qué hago",
|
| 152 |
+
"cómo añado un repositorio ppa",
|
| 153 |
+
"el sonido no sale por los auriculares en pop os",
|
| 154 |
+
"qué diferencia hay entre apt y snap",
|
| 155 |
+
"cómo veo cuánto espacio libre queda en el disco desde la terminal",
|
| 156 |
+
"me sale \"dpkg was interrupted\" al instalar algo",
|
| 157 |
+
"por qué tarda tanto en arrancar mi debian",
|
| 158 |
+
"cómo configuro grub para que arranque windows por defecto",
|
| 159 |
+
"no puedo montar mi disco ntfs externo",
|
| 160 |
+
"qué es el archivo /etc/fstab y para qué sirve",
|
| 161 |
+
"cómo instalo los drivers propietarios de nvidia",
|
| 162 |
+
"el bluetooth no encuentra mis cascos desde que cambié de kernel",
|
| 163 |
+
"explícame qué hace sudo",
|
| 164 |
+
"cómo creo un usuario nuevo desde la consola",
|
| 165 |
+
"la pantalla parpadea en wayland, cómo lo arreglo",
|
| 166 |
+
"cómo hago que un programa arranque solo al iniciar sesión en kde",
|
| 167 |
+
"qué significa el error \"permission denied\" al ejecutar un .sh",
|
| 168 |
+
"cómo actualizo todo el sistema en manjaro",
|
| 169 |
+
"se me congela el escritorio gnome cada rato",
|
| 170 |
+
"cómo veo qué proceso está usando tanta RAM",
|
| 171 |
+
"mi impresora hp no aparece en linux",
|
| 172 |
+
"como instalo un .deb que descargué",
|
| 173 |
+
"qué es un swap y cuánto necesito",
|
| 174 |
+
"no tengo internet por cable en opensuse",
|
| 175 |
+
"cómo cambio el shell por defecto a zsh",
|
| 176 |
+
"el touchpad no funciona después de instalar linux",
|
| 177 |
+
"cómo reviso los logs del sistema con journalctl",
|
| 178 |
+
"qué hace el comando grep y cómo lo uso",
|
| 179 |
+
"me dice que no hay espacio en /boot al actualizar",
|
| 180 |
+
"cómo instalo flatpak y añado flathub",
|
| 181 |
+
"la resolución de la pantalla está mal y no me deja cambiarla",
|
| 182 |
+
"cómo configuro una ip fija en networkmanager",
|
| 183 |
+
"qué es systemctl y cómo reinicio un servicio",
|
| 184 |
+
"se me rompió el gestor de paquetes pacman, keyring error",
|
| 185 |
+
"como pongo el teclado en español latinoamericano en xfce",
|
| 186 |
+
"por qué el ventilador va a tope todo el rato en mi linux",
|
| 187 |
+
"cómo desinstalo completamente un programa con apt",
|
| 188 |
+
"no arranca el entorno gráfico, me quedo en la terminal negra",
|
| 189 |
+
"qué son los permisos de lectura escritura y ejecución",
|
| 190 |
+
"cómo hago una copia de seguridad del sistema con timeshift",
|
| 191 |
+
"me sale kernel panic al encender",
|
| 192 |
+
"cómo compruebo qué versión de kernel tengo",
|
| 193 |
+
"el micrófono no lo detecta discord en linux",
|
| 194 |
+
"cómo comparto una carpeta con samba en mi red",
|
| 195 |
+
"qué diferencia hay entre xorg y wayland",
|
| 196 |
+
"cómo instalo wine para correr programas de windows",
|
| 197 |
+
"el disco duro hace ruidos, cómo veo su estado smart",
|
| 198 |
+
"cómo cambio el hostname de mi máquina",
|
| 199 |
+
"no se ven los iconos de algunas apps en el panel",
|
| 200 |
+
"cómo doy permisos de ejecución a un appimage",
|
| 201 |
+
"la hora del sistema está desfasada tras el dual boot",
|
| 202 |
+
"cómo configuro el firewall ufw",
|
| 203 |
+
"por qué no puedo hacer sudo, dice que no estoy en sudoers",
|
| 204 |
+
"cómo instalo docker en ubuntu 24.04",
|
| 205 |
+
"qué hace el comando rm -rf y por qué es peligroso",
|
| 206 |
+
"el steam no abre en mi linux, se queda cargando",
|
| 207 |
+
"cómo cambio los dns del sistema",
|
| 208 |
+
"mi usb no aparece al conectarlo",
|
| 209 |
+
"cómo hago downgrade de un paquete en arch",
|
| 210 |
+
"la batería se gasta rapidísimo en linux, cómo la optimizo",
|
| 211 |
+
"cómo hago un pendrive booteable desde la terminal con dd",
|
| 212 |
+
"el comando apt update da error de firma GPG",
|
| 213 |
+
"cómo configuro dos monitores con distinta escala",
|
| 214 |
+
"qué es un cron y cómo programo tareas con crontab",
|
| 215 |
+
"me pide contraseña del keyring cada vez que inicio sesión",
|
| 216 |
+
"como instalo la ultima version de python sin romper la del sistema"
|
| 217 |
+
],
|
| 218 |
+
"acao": [
|
| 219 |
+
"abre spotify",
|
| 220 |
+
"sube el volumen un poco",
|
| 221 |
+
"apaga el wifi",
|
| 222 |
+
"activa el bluetooth",
|
| 223 |
+
"pon el brillo al 50 por ciento",
|
| 224 |
+
"cierra el firefox",
|
| 225 |
+
"activa el modo oscuro",
|
| 226 |
+
"bloquea el equipo ya",
|
| 227 |
+
"haz una captura de pantalla",
|
| 228 |
+
"mueve el archivo informe.pdf a la carpeta Documentos",
|
| 229 |
+
"renombra foto1.jpg a vacaciones.jpg",
|
| 230 |
+
"borra la carpeta temporal del escritorio",
|
| 231 |
+
"abre la terminal por favor",
|
| 232 |
+
"silencia el sonido",
|
| 233 |
+
"apaga el ordenador",
|
| 234 |
+
"reinicia el equipo en cinco minutos",
|
| 235 |
+
"abre visual studio code",
|
| 236 |
+
"crea una carpeta llamada proyectos en el escritorio",
|
| 237 |
+
"baja el brillo de la pantalla",
|
| 238 |
+
"manda un mensaje por telegram a mamá que llego tarde",
|
| 239 |
+
"abre el gestor de archivos en descargas",
|
| 240 |
+
"pon la música en pausa",
|
| 241 |
+
"siguiente canción en spotify",
|
| 242 |
+
"conecta los auriculares bluetooth",
|
| 243 |
+
"cierra todas las ventanas",
|
| 244 |
+
"abre libreoffice writer",
|
| 245 |
+
"escribe hola mundo en el editor de texto",
|
| 246 |
+
"minimiza la ventana actual",
|
| 247 |
+
"pon el no molestar hasta mañana",
|
| 248 |
+
"copia el archivo notas.txt al pendrive",
|
| 249 |
+
"suspende el portátil",
|
| 250 |
+
"abre la calculadora y suma 245 más 390",
|
| 251 |
+
"pon el volumen al máximo",
|
| 252 |
+
"desactiva la luz nocturna",
|
| 253 |
+
"abre gimp",
|
| 254 |
+
"cambia el fondo de pantalla a la foto del perro",
|
| 255 |
+
"vacia la papelera de reciclaje ahora",
|
| 256 |
+
"abre thunderbird y redacta un correo a juan",
|
| 257 |
+
"cierra sesión",
|
| 258 |
+
"abre discord",
|
| 259 |
+
"comprime la carpeta fotos en un zip",
|
| 260 |
+
"activa el modo avión",
|
| 261 |
+
"abre la configuración de pantalla",
|
| 262 |
+
"descomprime el archivo juegos.zip en descargas",
|
| 263 |
+
"abre obs y empieza a grabar",
|
| 264 |
+
"pon el portátil en modo ahorro de energía",
|
| 265 |
+
"elimina los archivos .tmp de mi carpeta personal",
|
| 266 |
+
"abre vlc con la película que está en videos",
|
| 267 |
+
"maximiza el navegador",
|
| 268 |
+
"cambia el idioma del teclado a inglés",
|
| 269 |
+
"abre steam",
|
| 270 |
+
"envía por whatsapp a carlos \"ya voy\"",
|
| 271 |
+
"graba la pantalla durante un minuto",
|
| 272 |
+
"desconecta la vpn",
|
| 273 |
+
"abrir el reproductor de musica",
|
| 274 |
+
"apaga la pantalla",
|
| 275 |
+
"cierra el spotify y abre rhythmbox",
|
| 276 |
+
"pega el texto copiado en el documento de writer",
|
| 277 |
+
"sube el brillo al tope",
|
| 278 |
+
"conéctate a la red wifi de casa",
|
| 279 |
+
"activa la rotación automática",
|
| 280 |
+
"abre el monitor del sistema",
|
| 281 |
+
"quita el sonido de las notificaciones",
|
| 282 |
+
"duplica el archivo presupuesto.ods",
|
| 283 |
+
"abre krita porfa",
|
| 284 |
+
"programa el apagado a las 11 de la noche",
|
| 285 |
+
"cambia a la ventana de telegram",
|
| 286 |
+
"abre una nueva ventana de terminal en la carpeta proyectos",
|
| 287 |
+
"ponle volumen 30",
|
| 288 |
+
"mueve todas las capturas del escritorio a Imágenes"
|
| 289 |
+
],
|
| 290 |
+
"busca": [
|
| 291 |
+
"precio del dólar hoy en argentina",
|
| 292 |
+
"quién ganó el clásico anoche",
|
| 293 |
+
"qué tiempo va a hacer mañana en madrid",
|
| 294 |
+
"últimas noticias sobre la inteligencia artificial",
|
| 295 |
+
"cuándo sale el próximo gta",
|
| 296 |
+
"busca un tutorial de blender para principiantes",
|
| 297 |
+
"cuánto cuesta una rtx 5070 ahora",
|
| 298 |
+
"resultados de la liga mx de este fin de semana",
|
| 299 |
+
"búscame reseñas del último iphone",
|
| 300 |
+
"va a llover hoy en bogotá",
|
| 301 |
+
"a qué hora juega el barça",
|
| 302 |
+
"cotización del euro en pesos mexicanos",
|
| 303 |
+
"qué película está arrasando en taquilla esta semana",
|
| 304 |
+
"busca vídeos de cómo hacer pan casero",
|
| 305 |
+
"cuál es la última versión de ubuntu que salió",
|
| 306 |
+
"noticias de la bolsa hoy",
|
| 307 |
+
"quien va primero en la clasificación de la fórmula 1",
|
| 308 |
+
"dónde puedo comprar entradas para el concierto de bad bunny",
|
| 309 |
+
"qué pasó hoy en las elecciones",
|
| 310 |
+
"precio del bitcoin ahora mismo",
|
| 311 |
+
"busca opiniones del restaurante que abrió en mi barrio",
|
| 312 |
+
"cuándo se estrena la nueva temporada de the last of us",
|
| 313 |
+
"recetas populares en youtube de lasaña",
|
| 314 |
+
"cómo quedó el partido de la selección",
|
| 315 |
+
"buscame ofertas de portátiles en amazon",
|
| 316 |
+
"qué dicen las reviews del nuevo zelda",
|
| 317 |
+
"hay alerta de tormenta en valencia",
|
| 318 |
+
"cuánto está el litro de gasolina en chile",
|
| 319 |
+
"qué juegos están gratis en epic games esta semana",
|
| 320 |
+
"busca información actualizada sobre la huelga de transporte",
|
| 321 |
+
"qué tal está el tráfico para ir al centro",
|
| 322 |
+
"último video de ibai",
|
| 323 |
+
"lanzamientos de anime de esta temporada",
|
| 324 |
+
"quién es el actual presidente de perú",
|
| 325 |
+
"temperatura ahora en ciudad de méxico",
|
| 326 |
+
"busca un curso gratis de excel en internet",
|
| 327 |
+
"qué se sabe del terremoto de hoy",
|
| 328 |
+
"comparativa de precios de ssd de 2tb",
|
| 329 |
+
"cuándo es el próximo eclipse visible desde españa",
|
| 330 |
+
"resultados de la nba de anoche",
|
| 331 |
+
"noticias de linux de esta semana",
|
| 332 |
+
"hay descuentos en steam ahora",
|
| 333 |
+
"busca la letra de la canción nueva de rosalía",
|
| 334 |
+
"cuál es el ranking atp actualizado",
|
| 335 |
+
"pronóstico del clima para el fin de semana en lima",
|
| 336 |
+
"busca en internet qué opinan del kernel 6.18",
|
| 337 |
+
"cuánto vale un pasaje a cancún en diciembre",
|
| 338 |
+
"qué horario tiene hoy la farmacia de la esquina",
|
| 339 |
+
"última actualización de minecraft qué trae",
|
| 340 |
+
"buscá quién ganó el oscar a mejor película este año",
|
| 341 |
+
"cómo va la champions",
|
| 342 |
+
"precio de la playstation 6",
|
| 343 |
+
"quién marcó los goles del real madrid ayer",
|
| 344 |
+
"novedades de la última versión de python",
|
| 345 |
+
"busca tutoriales en youtube de cómo cambiar la pantalla del móvil",
|
| 346 |
+
"tipo de cambio del real brasileño hoy",
|
| 347 |
+
"qué series nuevas hay en netflix este mes",
|
| 348 |
+
"cuándo juega colombia el próximo partido",
|
| 349 |
+
"busca la reseña de la película que estrenaron el viernes",
|
| 350 |
+
"cual es el precio del oro hoy",
|
| 351 |
+
"hay retrasos en los vuelos de barajas",
|
| 352 |
+
"qué tendencias hay hoy en twitter",
|
| 353 |
+
"búscame hoteles baratos en buenos aires para el finde",
|
| 354 |
+
"salió ya la actualización de gnome 50",
|
| 355 |
+
"busca en google cómo están las acciones de nvidia",
|
| 356 |
+
"calendario de la copa libertadores",
|
| 357 |
+
"qué está pasando en la guerra comercial esta semana",
|
| 358 |
+
"cuánto cobra un programador junior en méxico según ofertas actuales",
|
| 359 |
+
"busca el horario de misas de la catedral este domingo",
|
| 360 |
+
"qué ha dicho hoy el banco central sobre los tipos de interés"
|
| 361 |
+
],
|
| 362 |
+
"simples": [
|
| 363 |
+
"hola",
|
| 364 |
+
"buen día!",
|
| 365 |
+
"graciass",
|
| 366 |
+
"muchas gracias, crack",
|
| 367 |
+
"buenas noches",
|
| 368 |
+
"adiós",
|
| 369 |
+
"hasta lueguito",
|
| 370 |
+
"¿cómo estás?",
|
| 371 |
+
"qué onda",
|
| 372 |
+
"hey",
|
| 373 |
+
"chao",
|
| 374 |
+
"nos vemos mañana",
|
| 375 |
+
"gracias por la ayuda",
|
| 376 |
+
"todo bien?",
|
| 377 |
+
"buenas tardes",
|
| 378 |
+
"abre google",
|
| 379 |
+
"abre facebook",
|
| 380 |
+
"abre twitter",
|
| 381 |
+
"abre wikipedia",
|
| 382 |
+
"abre netflix",
|
| 383 |
+
"entra en amazon",
|
| 384 |
+
"abre reddit",
|
| 385 |
+
"abre twitch",
|
| 386 |
+
"abre el whatsapp web",
|
| 387 |
+
"abre linkedin",
|
| 388 |
+
"abre tiktok",
|
| 389 |
+
"abre spotify web",
|
| 390 |
+
"abre mercado libre",
|
| 391 |
+
"abre github",
|
| 392 |
+
"abre outlook.com",
|
| 393 |
+
"vale gracias",
|
| 394 |
+
"genial, gracias",
|
| 395 |
+
"ok",
|
| 396 |
+
"perfecto",
|
| 397 |
+
"qué tal tu día",
|
| 398 |
+
"hola tars",
|
| 399 |
+
"oye",
|
| 400 |
+
"eres un genio",
|
| 401 |
+
"hasta la próxima",
|
| 402 |
+
"buenas",
|
| 403 |
+
"saludos",
|
| 404 |
+
"holaaa",
|
| 405 |
+
"que tal va todo",
|
| 406 |
+
"mil gracias",
|
| 407 |
+
"me voy a dormir, hasta mañana",
|
| 408 |
+
"cuídate",
|
| 409 |
+
"de nada",
|
| 410 |
+
"jaja qué bueno",
|
| 411 |
+
"ya está, gracias",
|
| 412 |
+
"abre youtube music",
|
| 413 |
+
"entra a instagram",
|
| 414 |
+
"abre pinterest",
|
| 415 |
+
"abre la página de la wikipedia",
|
| 416 |
+
"abre chatgpt",
|
| 417 |
+
"abre el diario el país",
|
| 418 |
+
"abre duolingo",
|
| 419 |
+
"abre discord web",
|
| 420 |
+
"abre stack overflow",
|
| 421 |
+
"abre google maps",
|
| 422 |
+
"pon la página de google translate",
|
| 423 |
+
"qué pasa tío",
|
| 424 |
+
"hola, ¿me oyes?",
|
| 425 |
+
"bueno, adiós",
|
| 426 |
+
"listo",
|
| 427 |
+
"muy amable",
|
| 428 |
+
"gracias guapo",
|
| 429 |
+
"hola de nuevo",
|
| 430 |
+
"cómo va",
|
| 431 |
+
"feliz navidad",
|
| 432 |
+
"buen provecho"
|
| 433 |
+
],
|
| 434 |
+
"geral": [
|
| 435 |
+
"explica la fotosíntesis",
|
| 436 |
+
"escríbeme un poema sobre el mar",
|
| 437 |
+
"traduce \"buenos días\" al inglés",
|
| 438 |
+
"cuánto es 15 por 23",
|
| 439 |
+
"dame ideas para un regalo de cumpleaños",
|
| 440 |
+
"resume la historia de la revolución francesa",
|
| 441 |
+
"escribe un correo formal pidiendo vacaciones a mi jefe",
|
| 442 |
+
"qué es la teoría de la relatividad",
|
| 443 |
+
"cómo puedo organizar mejor mi tiempo",
|
| 444 |
+
"cuál es la capital de australia",
|
| 445 |
+
"redacta una carta de presentación para un trabajo de camarero",
|
| 446 |
+
"explícame qué es la inflación",
|
| 447 |
+
"traduce este párrafo al portugués",
|
| 448 |
+
"qué diferencia hay entre virus y bacteria",
|
| 449 |
+
"dame consejos para dormir mejor",
|
| 450 |
+
"cuántos planetas tiene el sistema solar",
|
| 451 |
+
"escribe un cuento corto para niños sobre un dragón",
|
| 452 |
+
"qué significa la palabra \"efímero\"",
|
| 453 |
+
"ayúdame a resolver esta ecuación: 2x + 5 = 17",
|
| 454 |
+
"dame la receta del gazpacho andaluz",
|
| 455 |
+
"quién escribió don quijote",
|
| 456 |
+
"dame nombres para mi gato",
|
| 457 |
+
"explícame cómo funciona un motor de combustión",
|
| 458 |
+
"escribe un mensaje de felicitación para una boda",
|
| 459 |
+
"qué es el teorema de pitágoras",
|
| 460 |
+
"resume este texto en tres frases",
|
| 461 |
+
"cómo le pido perdón a un amigo",
|
| 462 |
+
"cuánto es 7 elevado a 3",
|
| 463 |
+
"dame un plan de estudio para aprender inglés",
|
| 464 |
+
"por qué el cielo es azul",
|
| 465 |
+
"escribe una canción de rap sobre el lunes",
|
| 466 |
+
"qué es el agujero negro",
|
| 467 |
+
"tips para una entrevista de trabajo",
|
| 468 |
+
"traduce \"I love you\" al japonés",
|
| 469 |
+
"cuánto es el 20 por ciento de 350",
|
| 470 |
+
"quién fue simón bolívar",
|
| 471 |
+
"hazme una lista de la compra para una semana saludable",
|
| 472 |
+
"explícame la diferencia entre ser y estar",
|
| 473 |
+
"escribe un soneto sobre la amistad",
|
| 474 |
+
"qué es la democracia directa",
|
| 475 |
+
"cómo calculo el área de un círculo",
|
| 476 |
+
"propón un nombre para mi canal de videojuegos",
|
| 477 |
+
"qué es el ADN",
|
| 478 |
+
"escribe un discurso corto para la graduación",
|
| 479 |
+
"dame argumentos a favor y en contra de trabajar desde casa",
|
| 480 |
+
"cómo se dice mariposa en francés",
|
| 481 |
+
"qué pasó en la segunda guerra mundial, resumido",
|
| 482 |
+
"corrígeme la ortografía de este texto",
|
| 483 |
+
"dame 5 ideas de cena rápida",
|
| 484 |
+
"cuánto son 3 horas en segundos",
|
| 485 |
+
"explica qué es la mitosis",
|
| 486 |
+
"escribe una reseña inventada de un libro de fantasía",
|
| 487 |
+
"qué significa carpe diem",
|
| 488 |
+
"cómo motivarme para hacer ejercicio",
|
| 489 |
+
"convierte 100 grados fahrenheit a celsius",
|
| 490 |
+
"cuéntame un chiste",
|
| 491 |
+
"qué es la economía circular",
|
| 492 |
+
"escribe un tuit gracioso sobre el café",
|
| 493 |
+
"cuál es el río más largo del mundo",
|
| 494 |
+
"reescribe esta frase de forma más formal",
|
| 495 |
+
"qué consejos me das para hablar en público",
|
| 496 |
+
"explícame el ciclo del agua",
|
| 497 |
+
"inventa un acertijo difícil",
|
| 498 |
+
"cuántos huesos tiene el cuerpo humano",
|
| 499 |
+
"qué es un número primo",
|
| 500 |
+
"escribe una disculpa por llegar tarde a clase",
|
| 501 |
+
"qué libros clásicos me recomiendas leer",
|
| 502 |
+
"cómo funciona la electricidad",
|
| 503 |
+
"dame un resumen del libro cien años de soledad",
|
| 504 |
+
"qué significa la expresión \"estar en las nubes\""
|
| 505 |
+
]
|
| 506 |
+
}
|
app/murph/gerado/extra.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"busca": [
|
| 3 |
+
"pesquise receitas de bolo de cenoura no google",
|
| 4 |
+
"pesquisa no google o horário do mercado",
|
| 5 |
+
"pesquisa preço de ssd nvme no google",
|
| 6 |
+
"procure no google como está o trânsito na br 277",
|
| 7 |
+
"procura no google a previsão do tempo pra amanhã",
|
| 8 |
+
"busque no google notícias sobre a copa",
|
| 9 |
+
"busca no google avaliações do galaxy s25",
|
| 10 |
+
"pesquise no bing o resultado do jogo do grêmio",
|
| 11 |
+
"pesquisa no duckduckgo o lançamento do novo ubuntu",
|
| 12 |
+
"joga no google quanto custa uma rtx 5060",
|
| 13 |
+
"dá um google em quem é o novo técnico da seleção",
|
| 14 |
+
"googla o preço do dólar hoje",
|
| 15 |
+
"pesquise tutoriais de kdenlive no youtube",
|
| 16 |
+
"pesquise raspberry pi 5 no google",
|
| 17 |
+
"agora pesquise placas de vídeo baratas no google",
|
| 18 |
+
"pesquise sobre o festival de inverno no google",
|
| 19 |
+
"search mechanical keyboards on google",
|
| 20 |
+
"google the opening hours of the library",
|
| 21 |
+
"look up rust 2026 roadmap on google",
|
| 22 |
+
"search bing for cheap flights to lisbon",
|
| 23 |
+
"now search framework laptop reviews on google",
|
| 24 |
+
"busca en google los horarios del tren a madrid",
|
| 25 |
+
"busca teclados mecánicos en google",
|
| 26 |
+
"ahora busca noticias de la fórmula 1 en google",
|
| 27 |
+
"cherche les horaires du cinéma sur google",
|
| 28 |
+
"cherche sur google le prix d'une ps5",
|
| 29 |
+
"maintenant cherche la météo de lyon sur google",
|
| 30 |
+
"such bei google nach günstigen Grafikkarten",
|
| 31 |
+
"google mal die Öffnungszeiten vom Baumarkt",
|
| 32 |
+
"such jetzt auf google nach dem Wetter in Hamburg"
|
| 33 |
+
],
|
| 34 |
+
"simples": [
|
| 35 |
+
"abre o google",
|
| 36 |
+
"entra no google pra mim",
|
| 37 |
+
"abre o bing",
|
| 38 |
+
"abre o duckduckgo",
|
| 39 |
+
"open google please",
|
| 40 |
+
"go to bing",
|
| 41 |
+
"abre duckduckgo",
|
| 42 |
+
"ouvre google",
|
| 43 |
+
"öffne bing",
|
| 44 |
+
"outra vez",
|
| 45 |
+
"faz outra vez",
|
| 46 |
+
"mais uma vez por favor",
|
| 47 |
+
"e agora?",
|
| 48 |
+
"e depois?",
|
| 49 |
+
"ok",
|
| 50 |
+
"okay",
|
| 51 |
+
"certo",
|
| 52 |
+
"beleza então",
|
| 53 |
+
"pode ser",
|
| 54 |
+
"sim",
|
| 55 |
+
"não",
|
| 56 |
+
"hmm",
|
| 57 |
+
"ah tá",
|
| 58 |
+
"entendi",
|
| 59 |
+
"tá bom",
|
| 60 |
+
"one more time",
|
| 61 |
+
"do it again",
|
| 62 |
+
"and now?",
|
| 63 |
+
"ok cool",
|
| 64 |
+
"sure",
|
| 65 |
+
"yes",
|
| 66 |
+
"no",
|
| 67 |
+
"got it",
|
| 68 |
+
"hmm ok",
|
| 69 |
+
"otra vez",
|
| 70 |
+
"hazlo otra vez",
|
| 71 |
+
"y ahora?",
|
| 72 |
+
"vale",
|
| 73 |
+
"sí",
|
| 74 |
+
"entendido",
|
| 75 |
+
"encore une fois",
|
| 76 |
+
"refais-le",
|
| 77 |
+
"et maintenant ?",
|
| 78 |
+
"d'accord",
|
| 79 |
+
"oui",
|
| 80 |
+
"compris",
|
| 81 |
+
"noch einmal",
|
| 82 |
+
"mach das nochmal",
|
| 83 |
+
"und jetzt?",
|
| 84 |
+
"alles klar",
|
| 85 |
+
"ja",
|
| 86 |
+
"verstanden"
|
| 87 |
+
]
|
| 88 |
+
}
|
app/murph/gerado/fr.json
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"visao": [
|
| 3 |
+
"clique sur l'icône verte en bas à droite",
|
| 4 |
+
"c'est quoi ce message rouge qui vient d'apparaître ?",
|
| 5 |
+
"lis-moi le texte affiché au milieu de l'écran",
|
| 6 |
+
"appuie sur le bouton bleu en haut de la fenêtre",
|
| 7 |
+
"tu peux me dire ce qu'il y a dans cette fenetre stp",
|
| 8 |
+
"décris ce que tu vois sur mon écran",
|
| 9 |
+
"clique sur la petite croix grise dans le coin",
|
| 10 |
+
"qu'est ce que dit la notification en haut a droite",
|
| 11 |
+
"fais glisser ce fichier jaune vers la corbeille",
|
| 12 |
+
"il y a une fenêtre qui s'est ouverte, elle raconte quoi ?",
|
| 13 |
+
"regarde l'écran et dis-moi s'il y a une erreur",
|
| 14 |
+
"clique sur le troisième lien de la liste",
|
| 15 |
+
"appuie sur le gros bouton orange",
|
| 16 |
+
"quel est le titre de l'onglet actif là ?",
|
| 17 |
+
"lis le chiffre qui s'affiche dans le coin supérieur gauche",
|
| 18 |
+
"clique sur l'image du chat au centre",
|
| 19 |
+
"c'est quoi cette icône en forme d'engrenage dans la barre ?",
|
| 20 |
+
"peux-tu cliquer sur la case à cocher juste en dessous du champ mot de passe",
|
| 21 |
+
"regarde ce graphique et explique-moi ce qu'il montre",
|
| 22 |
+
"déplace la fenêtre de gauche un peu plus vers la droite",
|
| 23 |
+
"clique sur le bouton qui ressemble à une flèche vers le bas",
|
| 24 |
+
"qu'est-ce qui est surligné en jaune dans ce document ?",
|
| 25 |
+
"lis les sous-titres qui sont à l'écran en ce moment",
|
| 26 |
+
"appuie sur le truc rouge clignotant",
|
| 27 |
+
"y a un popup bizarre, clique sur annuler dedans",
|
| 28 |
+
"dis moi combien d'onglets sont ouverts dans le navigateur que je regarde",
|
| 29 |
+
"clique sur le deuxième résultat de recherche affiché",
|
| 30 |
+
"quelle heure est affichée sur l'horloge de l'écran ?",
|
| 31 |
+
"sélectionne le texte en gras en haut de la page",
|
| 32 |
+
"décrivez-moi l'image qui est affichée en plein écran s'il vous plaît",
|
| 33 |
+
"clique sur l'avatar rond tout en haut",
|
| 34 |
+
"traduis ce qui est écrit dans la boîte de dialogue",
|
| 35 |
+
"regarde le tableau et dis-moi quelle ligne est en rouge",
|
| 36 |
+
"clique là où il y a marqué suivant",
|
| 37 |
+
"qu'est-ce que ce voyant orange signifie dans la barre des tâches ?",
|
| 38 |
+
"double-clique sur le dossier bleu du bureau",
|
| 39 |
+
"lis l'adresse mail qui est affichée dans la fenêtre de gauche",
|
| 40 |
+
"ferme la fenêtre qui est devant, celle avec le fond noir",
|
| 41 |
+
"appuie sur le bouton en forme de cœur sous la photo",
|
| 42 |
+
"clique sur l'icone du milieu dans le dock",
|
| 43 |
+
"j'arrive pas a lire ce texte trop petit, tu peux me le lire",
|
| 44 |
+
"trouve le bouton télécharger sur cette page et clique dessus",
|
| 45 |
+
"tu vois le menu déroulant ? choisis la dernière option",
|
| 46 |
+
"qu'est ce que c'est que ce logo en haut de la page",
|
| 47 |
+
"décris la mise en page de ce site que j'ai ouvert",
|
| 48 |
+
"clique sur le petit point d'interrogation à côté du champ",
|
| 49 |
+
"regarde cette capture et dis-moi quel est le message d'erreur",
|
| 50 |
+
"fais défiler jusqu'au bouton vert puis clique dessus",
|
| 51 |
+
"la fenêtre du fond, qu'est-ce qu'elle affiche ?",
|
| 52 |
+
"clique sur la vignette de la vidéo en haut à gauche",
|
| 53 |
+
"lis-moi les trois premières lignes du terminal visible",
|
| 54 |
+
"appuie sur l'onglet juste à droite de celui qui est ouvert",
|
| 55 |
+
"c'est quoi le prix affiché sur cette page produit",
|
| 56 |
+
"clique sur le bouton gris qui dit accepter",
|
| 57 |
+
"est-ce que le voyant du micro est allumé sur l'écran ?",
|
| 58 |
+
"regarde l'écran, j'ai coché la bonne case ?",
|
| 59 |
+
"coche la case vide en face de la deuxième ligne",
|
| 60 |
+
"quelle couleur a le bouton de connexion sur cette page",
|
| 61 |
+
"clique sur l'icône qui ressemble à une loupe",
|
| 62 |
+
"dis-moi ce qui est entouré en rouge sur l'image",
|
| 63 |
+
"lis la légende sous la photo",
|
| 64 |
+
"glisse le curseur de la barre du milieu tout à droite",
|
| 65 |
+
"il y a quoi comme applis dans la barre en bas ?",
|
| 66 |
+
"clic droit sur l'icône en forme de nuage",
|
| 67 |
+
"clique sur le lien souligné en bleu dans ce paragraphe",
|
| 68 |
+
"résume ce qui est affiché dans la fenêtre du navigateur",
|
| 69 |
+
"appuie sur la flèche retour en haut a gauche de la fenetre",
|
| 70 |
+
"l'élément qui clignote en bas, c'est quoi ?",
|
| 71 |
+
"vérifie à l'écran si le téléchargement est terminé",
|
| 72 |
+
"clique sur le bouton juste sous le logo"
|
| 73 |
+
],
|
| 74 |
+
"codigo": [
|
| 75 |
+
"écris une fonction python qui inverse une chaîne de caractères",
|
| 76 |
+
"pourquoi j'ai un IndexError: list index out of range dans mon script",
|
| 77 |
+
"explique-moi ce que fait une closure en javascript",
|
| 78 |
+
"fais moi un script bash qui renomme tous les .jpeg en .jpg dans un dossier",
|
| 79 |
+
"corrige ce code : for i in range(10) print(i)",
|
| 80 |
+
"comment on déclare un tableau en C ?",
|
| 81 |
+
"c'est quoi la différence entre let et var en JS",
|
| 82 |
+
"écris une classe Java pour représenter un compte bancaire",
|
| 83 |
+
"mon programme rust compile pas, erreur borrowed value does not live long enough",
|
| 84 |
+
"génère une requête SQL qui compte les utilisateurs par pays",
|
| 85 |
+
"peux-tu m'expliquer la récursivité avec un exemple en python",
|
| 86 |
+
"transforme cette boucle for en list comprehension",
|
| 87 |
+
"j'ai un segfault dans mon code C++, comment le trouver ?",
|
| 88 |
+
"écris un petit serveur web en node avec express",
|
| 89 |
+
"qu'est-ce qu'un pointeur en C",
|
| 90 |
+
"fais une regex qui valide une adresse email",
|
| 91 |
+
"comment lire un fichier CSV en python avec pandas",
|
| 92 |
+
"mon useEffect en React se lance en boucle, pourquoi ?",
|
| 93 |
+
"écrivez une fonction qui calcule la suite de Fibonacci en Go",
|
| 94 |
+
"explique la complexité O(n log n) du tri fusion",
|
| 95 |
+
"TypeError: 'NoneType' object is not subscriptable c'est quoi ce bug",
|
| 96 |
+
"ajoute la gestion des exceptions à ma fonction de lecture de fichier",
|
| 97 |
+
"code un jeu du pendu en python dans le terminal",
|
| 98 |
+
"c'est quoi une API REST, et comment en coder une en Flask ?",
|
| 99 |
+
"refactorise ce code pour qu'il soit plus lisible",
|
| 100 |
+
"comment faire un async await en typescript",
|
| 101 |
+
"écris des tests unitaires pytest pour ma fonction add",
|
| 102 |
+
"ma variable est undefined dans ma fonction callback js",
|
| 103 |
+
"quelle est la différence entre une liste et un tuple en python",
|
| 104 |
+
"fait une fonction qui trie un dictionnaire par valeur",
|
| 105 |
+
"implémente une pile en C avec une liste chaînée",
|
| 106 |
+
"explique moi le pattern singleton",
|
| 107 |
+
"mon script python dit ModuleNotFoundError: No module named requests dans mon venv, comment corriger le code d'import",
|
| 108 |
+
"écris un makefile pour compiler mon projet C avec deux fichiers",
|
| 109 |
+
"comment centrer une div en CSS",
|
| 110 |
+
"convertis ce code python en javascript",
|
| 111 |
+
"c'est quoi l'héritage multiple en programmation orientée objet",
|
| 112 |
+
"écris un script qui télécharge une page web et compte les mots",
|
| 113 |
+
"pourquoi mon == ne marche pas pour comparer deux strings en Java",
|
| 114 |
+
"crée une fonction lua pour un mod qui fait apparaître un objet",
|
| 115 |
+
"optimise cette requête SQL qui est trop lente",
|
| 116 |
+
"écris un décorateur python qui mesure le temps d'exécution",
|
| 117 |
+
"comment gérer les erreurs en Go avec if err != nil",
|
| 118 |
+
"génère un fichier JSON à partir d'une liste d'objets en C#",
|
| 119 |
+
"mon code kotlin plante avec NullPointerException",
|
| 120 |
+
"explique ce que fait ce bout de code : x = [i**2 for i in range(5) if i%2]",
|
| 121 |
+
"écris un algorithme de recherche binaire",
|
| 122 |
+
"fais un script python qui envoie une notification toutes les heures",
|
| 123 |
+
"c'est quoi un générateur en python et quand l'utiliser",
|
| 124 |
+
"corrige mon indentation, j'ai IndentationError: unexpected indent",
|
| 125 |
+
"crée un composant React pour un bouton qui compte les clics",
|
| 126 |
+
"comment on fait un fork et un exec en C",
|
| 127 |
+
"écris une fonction qui vérifie si un nombre est premier en haskell",
|
| 128 |
+
"mon code php affiche une page blanche sans erreur",
|
| 129 |
+
"explique moi git rebase vs merge pour mon projet de code",
|
| 130 |
+
"écris un script qui parse des logs et sort les lignes avec ERROR",
|
| 131 |
+
"quelle est la syntaxe d'un switch en swift",
|
| 132 |
+
"implémente un tri à bulles en assembleur x86",
|
| 133 |
+
"pourquoi ma boucle while ne s'arrête jamais",
|
| 134 |
+
"écris une fonction qui fusionne deux listes triées",
|
| 135 |
+
"comment utiliser les threads en python sans race condition",
|
| 136 |
+
"fais-moi un programme qui convertit des celsius en fahrenheit en C",
|
| 137 |
+
"c quoi un hashmap et comment ca marche en interne",
|
| 138 |
+
"ajoute des commentaires à ce code pour l'expliquer",
|
| 139 |
+
"écris une commande awk dans mon script pour sommer la 3e colonne",
|
| 140 |
+
"comment faire un appel fetch POST avec du JSON en JS",
|
| 141 |
+
"mon script python a une fuite mémoire, comment la trouver",
|
| 142 |
+
"génère une interface graphique simple avec tkinter",
|
| 143 |
+
"écris un Dockerfile pour mon appli flask",
|
| 144 |
+
"qu'est-ce que le typage statique vs dynamique"
|
| 145 |
+
],
|
| 146 |
+
"tecnico": [
|
| 147 |
+
"le wifi ne se connecte plus depuis la mise à jour",
|
| 148 |
+
"comment installer steam sur ubuntu ?",
|
| 149 |
+
"mon son ne marche plus sur fedora, aucune sortie détectée",
|
| 150 |
+
"c'est quoi la commande pour voir l'espace disque restant",
|
| 151 |
+
"comment installer les pilotes nvidia sur linux mint",
|
| 152 |
+
"apt me dit unable to lock the administration directory, que faire",
|
| 153 |
+
"mon écran reste noir après le démarrage de ma debian",
|
| 154 |
+
"comment ajouter un utilisateur au groupe sudo",
|
| 155 |
+
"c'est quoi systemd exactement ?",
|
| 156 |
+
"le bluetooth ne détecte pas mon casque sous arch",
|
| 157 |
+
"comment monter un disque dur externe en ligne de commande",
|
| 158 |
+
"pourquoi mon pc linux est si lent au démarrage",
|
| 159 |
+
"expliquez-moi à quoi sert le fichier /etc/fstab",
|
| 160 |
+
"comment changer les permissions d'un fichier avec chmod",
|
| 161 |
+
"flatpak ou snap, lequel utiliser pour installer des applis ?",
|
| 162 |
+
"grub ne s'affiche plus après avoir installé windows à côté",
|
| 163 |
+
"comment voir quels processus bouffent toute ma ram",
|
| 164 |
+
"ma webcam n'est pas reconnue sur pop os",
|
| 165 |
+
"comment mettre à jour tout le système sur manjaro",
|
| 166 |
+
"j'ai une erreur dpkg was interrupted, comment réparer",
|
| 167 |
+
"comment configurer une adresse IP fixe sur ubuntu server",
|
| 168 |
+
"la veille ne fonctionne pas bien, le pc se réveille tout seul",
|
| 169 |
+
"comment installer un fichier .deb",
|
| 170 |
+
"mon clavier est en qwerty au lieu d'azerty dans le terminal tty",
|
| 171 |
+
"c'est quoi la différence entre wayland et x11",
|
| 172 |
+
"comment désinstaller complètement un paquet avec ses dépendances",
|
| 173 |
+
"mon imprimante hp n'imprime plus depuis que j'ai changé de distro",
|
| 174 |
+
"comment créer un service systemd qui se lance au démarrage",
|
| 175 |
+
"que veut dire kernel panic et comment l'éviter",
|
| 176 |
+
"le pavé tactile de mon portable ne marche pas sous linux",
|
| 177 |
+
"comment installer docker sur debian 12",
|
| 178 |
+
"ma partition /home est pleine, comment libérer de la place",
|
| 179 |
+
"comment activer le pare-feu ufw et autoriser ssh",
|
| 180 |
+
"les polices sont floues dans certaines applis sur kde",
|
| 181 |
+
"comment passer à un kernel plus récent sur ubuntu",
|
| 182 |
+
"pourquoi j'ai pas le son en hdmi sur mon linux",
|
| 183 |
+
"comment voir les logs du système avec journalctl",
|
| 184 |
+
"c quoi un swap et j'en ai besoin ?",
|
| 185 |
+
"le gestionnaire de mise a jour plante a chaque fois",
|
| 186 |
+
"comment installer une appimage et l'ajouter au menu",
|
| 187 |
+
"j'ai perdu le mot de passe root de mon linux, comment le réinitialiser",
|
| 188 |
+
"mon deuxième écran n'est pas détecté sous gnome",
|
| 189 |
+
"comment compiler un programme depuis les sources avec make install",
|
| 190 |
+
"pipewire ou pulseaudio, c'est quoi la différence",
|
| 191 |
+
"le ventilateur tourne à fond tout le temps sur mon laptop linux",
|
| 192 |
+
"comment faire un dualboot propre avec windows 11",
|
| 193 |
+
"comment savoir quelle version d'ubuntu j'ai installée",
|
| 194 |
+
"les jeux proton plantent au lancement sur steam deck mode bureau",
|
| 195 |
+
"comment ajouter un dépôt PPA",
|
| 196 |
+
"mon système de fichiers est en lecture seule d'un coup, pourquoi",
|
| 197 |
+
"comment chiffrer une clé usb sous linux",
|
| 198 |
+
"le réseau ethernet affiche connecté mais pas d'internet",
|
| 199 |
+
"a quoi sert la commande grep et comment l'utiliser",
|
| 200 |
+
"comment faire une sauvegarde complète de mon système linux",
|
| 201 |
+
"cups ne trouve pas mon imprimante réseau",
|
| 202 |
+
"comment changer le shell par défaut en zsh",
|
| 203 |
+
"pourquoi sudo me demande pas mon mot de passe",
|
| 204 |
+
"le paquet est cassé, apt --fix-broken install ne marche pas",
|
| 205 |
+
"comment installer ollama sur ma machine linux",
|
| 206 |
+
"ma carte graphique amd n'est pas utilisée pour les jeux",
|
| 207 |
+
"comment planifier une tâche avec cron",
|
| 208 |
+
"le démarrage bloque sur a start job is running",
|
| 209 |
+
"comment connaître la température du processeur en ligne de commande",
|
| 210 |
+
"j'arrive pas à installer vscode sur fedora",
|
| 211 |
+
"c'est quoi le dossier /var et je peux le vider ?",
|
| 212 |
+
"le micro capte rien dans discord sous linux, les réglages système le voient pas",
|
| 213 |
+
"comment créer un lien symbolique avec ln",
|
| 214 |
+
"comment redimensionner une partition sans perdre de données",
|
| 215 |
+
"ma session gnome crash et me renvoie à l'écran de connexion",
|
| 216 |
+
"quelle commande pour lister les périphériques usb branchés"
|
| 217 |
+
],
|
| 218 |
+
"acao": [
|
| 219 |
+
"ouvre spotify",
|
| 220 |
+
"monte le son",
|
| 221 |
+
"active le wifi",
|
| 222 |
+
"coupe le bluetooth s'il te plaît",
|
| 223 |
+
"baisse la luminosité à 30%",
|
| 224 |
+
"mets le mode sombre",
|
| 225 |
+
"ferme firefox",
|
| 226 |
+
"lance vlc",
|
| 227 |
+
"prends une capture d'écran",
|
| 228 |
+
"verrouille l'écran",
|
| 229 |
+
"éteins l'ordinateur dans 10 minutes",
|
| 230 |
+
"renomme le fichier rapport.pdf en rapport_final.pdf",
|
| 231 |
+
"supprime tous les fichiers du dossier Téléchargements qui finissent par .tmp",
|
| 232 |
+
"déplace mes photos du bureau vers le dossier Images",
|
| 233 |
+
"crée un dossier Projets dans mes documents",
|
| 234 |
+
"envoie bonjour à Marie sur telegram",
|
| 235 |
+
"écris 'je serai en retard' dans le chat discord",
|
| 236 |
+
"mets le volume à fond",
|
| 237 |
+
"coupe le son",
|
| 238 |
+
"redémarre le pc",
|
| 239 |
+
"ouvre le gestionnaire de fichiers dans le dossier musique",
|
| 240 |
+
"lance thunderbird et ouvre un nouveau mail",
|
| 241 |
+
"désactive le mode avion",
|
| 242 |
+
"passe en mode clair",
|
| 243 |
+
"ouvrez libreoffice writer s'il vous plaît",
|
| 244 |
+
"mets la luminosité au max",
|
| 245 |
+
"active le mode ne pas déranger",
|
| 246 |
+
"ferme toutes les fenêtres",
|
| 247 |
+
"lance gimp",
|
| 248 |
+
"copie le fichier notes.txt sur la clé usb",
|
| 249 |
+
"vide la corbeille",
|
| 250 |
+
"mets en pause la musique",
|
| 251 |
+
"passe à la chanson suivante sur spotify",
|
| 252 |
+
"ouvre les paramètres système",
|
| 253 |
+
"connecte-toi au réseau wifi Maison",
|
| 254 |
+
"active le partage de connexion",
|
| 255 |
+
"change le fond d'écran avec l'image plage.jpg",
|
| 256 |
+
"mets l'ordi en veille",
|
| 257 |
+
"ouvre un terminal",
|
| 258 |
+
"lance obs et commence l'enregistrement",
|
| 259 |
+
"compresse le dossier Vacances en zip",
|
| 260 |
+
"ferme steam",
|
| 261 |
+
"augmente le volume de 20 pour cent",
|
| 262 |
+
"déconnecte le casque bluetooth",
|
| 263 |
+
"appaire mes écouteurs bluetooth",
|
| 264 |
+
"ouvre le fichier budget.ods",
|
| 265 |
+
"tape mon adresse dans le champ de texte actif",
|
| 266 |
+
"envoie le fichier cv.pdf à Paul sur signal",
|
| 267 |
+
"active le filtre de lumière bleue",
|
| 268 |
+
"ouvre calculatrice",
|
| 269 |
+
"lance discord stp",
|
| 270 |
+
"fermes vscode sans sauvegarder",
|
| 271 |
+
"déconnecte-moi de la session",
|
| 272 |
+
"coupe le wifi",
|
| 273 |
+
"mets le son a 50",
|
| 274 |
+
"ouvre blender",
|
| 275 |
+
"change la langue du clavier en anglais",
|
| 276 |
+
"fais une capture de la fenêtre active seulement",
|
| 277 |
+
"archive les vieux logs du dossier ~/logs dans un tar.gz",
|
| 278 |
+
"supprime le dossier test sur le bureau",
|
| 279 |
+
"crée un fichier texte vide nommé idées.txt",
|
| 280 |
+
"réduis toutes les fenêtres",
|
| 281 |
+
"passe l'écran en 1920x1080",
|
| 282 |
+
"ouvre kate avec le fichier config.ini",
|
| 283 |
+
"mets le micro en sourdine",
|
| 284 |
+
"lance le jeu minecraft",
|
| 285 |
+
"démonte la clé usb",
|
| 286 |
+
"ajoute un rappel dans le calendrier demain à 9h pour le dentiste",
|
| 287 |
+
"envoie un mail à mon chef avec thunderbird pour dire que je suis malade",
|
| 288 |
+
"éteins l'écran"
|
| 289 |
+
],
|
| 290 |
+
"busca": [
|
| 291 |
+
"quel est le prix du bitcoin maintenant",
|
| 292 |
+
"qui a gagné le match hier soir entre le PSG et Marseille",
|
| 293 |
+
"météo à Lyon demain",
|
| 294 |
+
"quelles sont les dernières nouvelles sur l'élection",
|
| 295 |
+
"quand sort le prochain GTA",
|
| 296 |
+
"trouve-moi un tuto vidéo pour changer un pneu de vélo",
|
| 297 |
+
"cherche les avis sur la rtx 5070",
|
| 298 |
+
"combien coûte un iphone 17 en ce moment",
|
| 299 |
+
"le taux de change euro dollar aujourd'hui",
|
| 300 |
+
"résultats de la ligue des champions de ce soir",
|
| 301 |
+
"il va pleuvoir ce week-end à Bordeaux ?",
|
| 302 |
+
"quels films sortent au cinéma cette semaine",
|
| 303 |
+
"cherche une recette de tarte tatin sur marmiton",
|
| 304 |
+
"quoi de neuf dans la dernière version de firefox",
|
| 305 |
+
"qui est le premier ministre actuel",
|
| 306 |
+
"classement de la formule 1 après le dernier grand prix",
|
| 307 |
+
"trouve des vidéos youtube sur l'astronomie pour débutants",
|
| 308 |
+
"quel est le cours de l'action nvidia",
|
| 309 |
+
"y a-t-il des grèves de train demain en france ?",
|
| 310 |
+
"les meilleures distros linux en 2026 selon les tests",
|
| 311 |
+
"quand est le prochain concert de Stromae",
|
| 312 |
+
"cherche les horaires d'ouverture de la mairie de Nantes",
|
| 313 |
+
"actu tech du jour",
|
| 314 |
+
"comparatif des aspirateurs robots récents",
|
| 315 |
+
"est-ce que la nouvelle mise à jour de ubuntu est sortie ?",
|
| 316 |
+
"score du match de tennis de Roland-Garros en cours",
|
| 317 |
+
"prix de l'essence aujourd'hui",
|
| 318 |
+
"cherche-moi un tutoriel pour débuter en montage sur kdenlive",
|
| 319 |
+
"quelles sont les tendances sur twitter en ce moment",
|
| 320 |
+
"trouve un hôtel pas cher à Marseille pour ce weekend",
|
| 321 |
+
"qui a remporté le ballon d'or cette année",
|
| 322 |
+
"température actuelle à Montréal",
|
| 323 |
+
"combien de followers a MrBeast aujourd'hui",
|
| 324 |
+
"quelles sont les nouveautés de python 3.14",
|
| 325 |
+
"cherche des critiques du dernier film marvel",
|
| 326 |
+
"le vol AF123 est-il à l'heure ?",
|
| 327 |
+
"dernières infos sur le tremblement de terre",
|
| 328 |
+
"quand sort la saison 2 de cette série netflix dont tout le monde parle",
|
| 329 |
+
"quels sont les jeux gratuits sur epic games cette semaine",
|
| 330 |
+
"trouve un tuto pour installer des mods sur skyrim",
|
| 331 |
+
"combien coûte une ps5 d'occasion en ce moment",
|
| 332 |
+
"qui joue ce soir en NBA",
|
| 333 |
+
"y a des soldes sur steam en ce moment ?",
|
| 334 |
+
"cherche les résultats du bac 2026",
|
| 335 |
+
"prévisions météo pour la semaine à Paris",
|
| 336 |
+
"quelle est la dernière version du noyau linux sortie",
|
| 337 |
+
"les nouvelles du jour en Belgique",
|
| 338 |
+
"quel est le prix de l'or aujourd'hui",
|
| 339 |
+
"trouve moi des avis sur le restaurant Le Petit Bistro à Lille",
|
| 340 |
+
"est ce que chatgpt est en panne là maintenant",
|
| 341 |
+
"combien de médailles la france a gagné aux derniers jeux",
|
| 342 |
+
"cherchez des tutoriels sur le crochet pour débutants",
|
| 343 |
+
"quel temps fait-il à Tokyo en ce moment",
|
| 344 |
+
"date de sortie du prochain iphone",
|
| 345 |
+
"les derniers transferts du mercato",
|
| 346 |
+
"cherche une vidéo qui explique comment faire un noeud de cravate",
|
| 347 |
+
"quelle est la population actuelle du monde en temps réel",
|
| 348 |
+
"meilleur smartphone à moins de 300 euros cette année",
|
| 349 |
+
"nouveautés annoncées à la dernière keynote apple",
|
| 350 |
+
"qui a gagné l'eurovision cette année",
|
| 351 |
+
"où en est le tour de france aujourd'hui",
|
| 352 |
+
"trouve des infos récentes sur la mission artemis",
|
| 353 |
+
"combien vaut l'ethereum actuellement",
|
| 354 |
+
"le trafic sur le périphérique est comment maintenant",
|
| 355 |
+
"cherche des tests du dernier casque steam vr",
|
| 356 |
+
"quand est la prochaine éclipse visible en france",
|
| 357 |
+
"le dernier épisode de one piece est sorti ?",
|
| 358 |
+
"recherche des offres d'emploi développeur à Toulouse",
|
| 359 |
+
"quels sont les résultats du top 14 ce week-end",
|
| 360 |
+
"cherche des vidéos de speedrun de mario 64 récentes"
|
| 361 |
+
],
|
| 362 |
+
"simples": [
|
| 363 |
+
"bonjour",
|
| 364 |
+
"salut !",
|
| 365 |
+
"merci beaucoup",
|
| 366 |
+
"ça va ?",
|
| 367 |
+
"au revoir",
|
| 368 |
+
"bonne nuit",
|
| 369 |
+
"coucou toi",
|
| 370 |
+
"ouvre dailymotion",
|
| 371 |
+
"va sur google",
|
| 372 |
+
"merci c'est parfait",
|
| 373 |
+
"bonsoir tars",
|
| 374 |
+
"hello",
|
| 375 |
+
"t'es là ?",
|
| 376 |
+
"à plus",
|
| 377 |
+
"ouvre gmail",
|
| 378 |
+
"ouvre wikipedia",
|
| 379 |
+
"lance netflix dans le navigateur",
|
| 380 |
+
"super merci",
|
| 381 |
+
"comment tu vas aujourd'hui ?",
|
| 382 |
+
"bonne journée à toi",
|
| 383 |
+
"slt",
|
| 384 |
+
"yo",
|
| 385 |
+
"merci pour ton aide",
|
| 386 |
+
"ouvre facebook",
|
| 387 |
+
"va sur twitter",
|
| 388 |
+
"à demain !",
|
| 389 |
+
"cc ça va",
|
| 390 |
+
"ouvre le site d'amazon",
|
| 391 |
+
"parfait, merci bien",
|
| 392 |
+
"tchao",
|
| 393 |
+
"ouvre reddit",
|
| 394 |
+
"salut comment ça va",
|
| 395 |
+
"bonjour, tu vas bien ?",
|
| 396 |
+
"génial merci",
|
| 397 |
+
"ouvre instagram",
|
| 398 |
+
"va sur twitch",
|
| 399 |
+
"bisous à plus",
|
| 400 |
+
"re",
|
| 401 |
+
"coucou",
|
| 402 |
+
"merci infiniment",
|
| 403 |
+
"bonne soirée",
|
| 404 |
+
"ouvre le site de la bbc",
|
| 405 |
+
"va sur leboncoin",
|
| 406 |
+
"hey tars",
|
| 407 |
+
"ok merci",
|
| 408 |
+
"quoi de neuf ?",
|
| 409 |
+
"ouvre linkedin",
|
| 410 |
+
"salut tars, ça roule ?",
|
| 411 |
+
"ciao",
|
| 412 |
+
"merci mon pote",
|
| 413 |
+
"allô ?",
|
| 414 |
+
"ouvre github.com",
|
| 415 |
+
"va sur wikipédia s'il te plaît",
|
| 416 |
+
"bonjour bonjour",
|
| 417 |
+
"tu vas bien ?",
|
| 418 |
+
"ouvre le site de netflix",
|
| 419 |
+
"cool merci",
|
| 420 |
+
"à la prochaine",
|
| 421 |
+
"ouvre tiktok",
|
| 422 |
+
"bien le bonjour",
|
| 423 |
+
"va sur chatgpt.com",
|
| 424 |
+
"merci, bonne nuit",
|
| 425 |
+
"ouvrez google maps",
|
| 426 |
+
"salut, je suis de retour",
|
| 427 |
+
"ouvre deezer dans le navigateur",
|
| 428 |
+
"hey salut",
|
| 429 |
+
"merci, t'es le meilleur",
|
| 430 |
+
"adieu",
|
| 431 |
+
"ouvre le site de youtube stp",
|
| 432 |
+
"bonjour tars, belle journée hein"
|
| 433 |
+
],
|
| 434 |
+
"geral": [
|
| 435 |
+
"explique la photosynthèse",
|
| 436 |
+
"écris un poème sur l'automne",
|
| 437 |
+
"traduis 'good morning' en espagnol",
|
| 438 |
+
"combien font 17 fois 23 ?",
|
| 439 |
+
"donne-moi des idées de cadeau pour mon père",
|
| 440 |
+
"résume l'histoire de la révolution française",
|
| 441 |
+
"écris un mail pour demander un congé à mon patron",
|
| 442 |
+
"c'est quoi un trou noir",
|
| 443 |
+
"quelle est la capitale de l'Australie",
|
| 444 |
+
"donne moi des conseils pour mieux dormir",
|
| 445 |
+
"explique la théorie de la relativité simplement",
|
| 446 |
+
"écris une histoire courte pour enfants avec un dragon",
|
| 447 |
+
"comment on dit merci en japonais",
|
| 448 |
+
"quelle est la différence entre un virus et une bactérie",
|
| 449 |
+
"aide moi à écrire une lettre de motivation pour un poste de vendeur",
|
| 450 |
+
"calcule 15% de 240",
|
| 451 |
+
"qui a écrit les misérables",
|
| 452 |
+
"donne-moi une recette simple de crêpes",
|
| 453 |
+
"explique comment fonctionne un moteur à explosion",
|
| 454 |
+
"trouve un nom pour mon chat roux",
|
| 455 |
+
"reformule cette phrase de façon plus polie : envoie moi ça vite",
|
| 456 |
+
"quels sont les avantages du télétravail",
|
| 457 |
+
"écris une blague sur les informaticiens",
|
| 458 |
+
"combien y a-t-il de planètes dans le système solaire",
|
| 459 |
+
"c'est quoi la différence entre météo et climat",
|
| 460 |
+
"résume le livre le petit prince",
|
| 461 |
+
"écris un discours pour le mariage de mon frère",
|
| 462 |
+
"comment fonctionne la démocratie athénienne",
|
| 463 |
+
"traduis ce paragraphe en anglais : je suis heureux de vous rencontrer",
|
| 464 |
+
"propose-moi un programme de musculation pour débutant",
|
| 465 |
+
"explique la loi de l'offre et de la demande",
|
| 466 |
+
"résous l'équation 2x + 5 = 17",
|
| 467 |
+
"quelle est la racine carrée de 144",
|
| 468 |
+
"donne moi 5 idées d'activités pour un dimanche pluvieux",
|
| 469 |
+
"qui était Napoléon Bonaparte",
|
| 470 |
+
"écris un haïku sur la mer",
|
| 471 |
+
"comment rester motivé quand on étudie",
|
| 472 |
+
"explique-moi ce qu'est l'inflation",
|
| 473 |
+
"quelle est la plus haute montagne du monde",
|
| 474 |
+
"corrige les fautes de cette phrase : je suis aller au magazin hier",
|
| 475 |
+
"écris une description pour mon profil de rencontre",
|
| 476 |
+
"pourquoi le ciel est bleu ?",
|
| 477 |
+
"conseille-moi un livre de science-fiction classique",
|
| 478 |
+
"combien de jours dans une année bissextile",
|
| 479 |
+
"écris un slogan pour une boulangerie",
|
| 480 |
+
"explique la différence entre ADN et ARN",
|
| 481 |
+
"comment faire une bonne première impression en entretien",
|
| 482 |
+
"convertis 5 miles en kilomètres",
|
| 483 |
+
"écris une chanson d'anniversaire pour ma sœur Julie",
|
| 484 |
+
"quelles sont les règles des échecs pour le roque",
|
| 485 |
+
"donne-moi un plan pour une dissertation sur la liberté",
|
| 486 |
+
"c koi la différence entre un crocodile et un alligator",
|
| 487 |
+
"écris un message de condoléances",
|
| 488 |
+
"comment gérer son stress avant un examen",
|
| 489 |
+
"explique ce qu'est un nombre premier",
|
| 490 |
+
"traduis 'je t'aime' en italien et en allemand",
|
| 491 |
+
"invente une devinette",
|
| 492 |
+
"quel est le rôle des globules rouges",
|
| 493 |
+
"fais un résumé de la seconde guerre mondiale en 5 lignes",
|
| 494 |
+
"aide-moi à trouver un titre pour mon roman policier",
|
| 495 |
+
"combien de secondes dans une journée",
|
| 496 |
+
"quels sont les signes du zodiaque",
|
| 497 |
+
"écris une excuse polie pour annuler un rendez-vous",
|
| 498 |
+
"explique pourquoi les saisons existent",
|
| 499 |
+
"donne moi des idées de repas végétariens pour la semaine",
|
| 500 |
+
"c'est quoi le théorème de pythagore",
|
| 501 |
+
"écrivez un petit texte pour présenter mon entreprise de jardinage",
|
| 502 |
+
"que signifie l'expression 'poser un lapin'",
|
| 503 |
+
"quelle est la dérivée de x au carré",
|
| 504 |
+
"propose des questions pour un quiz entre amis sur la géographie"
|
| 505 |
+
]
|
| 506 |
+
}
|
app/murph/gerado/pt_BR.json
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"visao": [
|
| 3 |
+
"clica naquele quadradinho vermelho no topo",
|
| 4 |
+
"o que ta escrito nessa janela que abriu?",
|
| 5 |
+
"me diz qual aba tá selecionada agora no navegador",
|
| 6 |
+
"aperta aquele botão cinza que diz continuar",
|
| 7 |
+
"tem alguma mensagem de erro na tela? le pra mim",
|
| 8 |
+
"clica na setinha do lado do nome do arquivo",
|
| 9 |
+
"arrasta aquele ícone amarelo pra lixeira",
|
| 10 |
+
"qual o preço que aparece nesse site aberto aí",
|
| 11 |
+
"descreve o gráfico que tá na tela",
|
| 12 |
+
"clica no terceiro item da lista",
|
| 13 |
+
"aquele pop-up laranja, fecha ele pra mim",
|
| 14 |
+
"onde tá o campo de senha nessa página? clica nele",
|
| 15 |
+
"le em voz alta o email que tá aberto",
|
| 16 |
+
"o que significa esse ícone piscando na barra de cima",
|
| 17 |
+
"clica no botão com um lápis desenhado",
|
| 18 |
+
"vc consegue ver qual música tá no spotify agora? pela tela",
|
| 19 |
+
"marca a caixinha que fica embaixo do texto",
|
| 20 |
+
"confere se tem alguma notificação vermelha no canto",
|
| 21 |
+
"clica no menu de três pontinhos no canto direito",
|
| 22 |
+
"qual é o nome do contato que aparece nessa conversa",
|
| 23 |
+
"aperta no botão de play que tá no meio do vídeo",
|
| 24 |
+
"rola pra baixo e me fala se tem um botão de enviar",
|
| 25 |
+
"o que é essa bolinha verde do lado do meu nome",
|
| 26 |
+
"clica ali no x da janela de trás",
|
| 27 |
+
"arrasta o controle deslizante até a metade",
|
| 28 |
+
"qual horário tá mostrando no canto da tela",
|
| 29 |
+
"me ajuda a achar o botão de aceitar os cookies nessa pagina",
|
| 30 |
+
"essa tabela aberta, quantas linhas ela tem?",
|
| 31 |
+
"clica no ícone que parece uma nuvem",
|
| 32 |
+
"o que esse aviso amarelo tá dizendo",
|
| 33 |
+
"seleciona aquela foto da esquerda",
|
| 34 |
+
"lê pra mim o que tá no terminal agora",
|
| 35 |
+
"tem algum erro vermelho no editor de código aberto?",
|
| 36 |
+
"clica na palavra sublinhada em azul",
|
| 37 |
+
"por favor, olha a tela e me diz se o instalador terminou",
|
| 38 |
+
"aperta a lupa lá em cima",
|
| 39 |
+
"qual janela tá em primeiro plano agora",
|
| 40 |
+
"clica no botão grandão verde de download da página",
|
| 41 |
+
"tem um captcha aí? me diz o que ele pede",
|
| 42 |
+
"arrasta esse arquivo da janela da esquerda pra da direita",
|
| 43 |
+
"qual o valor total que aparece nessa nota fiscal aberta",
|
| 44 |
+
"clica onde tá escrito proximo",
|
| 45 |
+
"olha essa planilha e me diz qual célula tá destacada",
|
| 46 |
+
"fecha aquela janelinha pequena no canto inferior",
|
| 47 |
+
"que foto é essa de fundo na minha área de trabalho",
|
| 48 |
+
"clica no avatar redondo lá no alto",
|
| 49 |
+
"le os comentarios que aparecem embaixo do video",
|
| 50 |
+
"o botão de configurações é aquele com engrenagem? clica nele",
|
| 51 |
+
"aperta aquele ícone de sininho",
|
| 52 |
+
"clica no segundo link azul da pesquisa",
|
| 53 |
+
"ve ai o que ta travando, tem alguma janela pedindo algo?",
|
| 54 |
+
"me fala as cores que aparecem nesse logo aberto",
|
| 55 |
+
"clica na aba que tá mais à direita",
|
| 56 |
+
"qual o nome do arquivo que tá aberto no editor",
|
| 57 |
+
"clica no botão que fica logo abaixo da imagem",
|
| 58 |
+
"tem alguma coisa escrita em inglês nessa tela? traduz o que aparece",
|
| 59 |
+
"passa o cursor por cima do ícone da bateria e me fala o que mostra",
|
| 60 |
+
"duplo clique naquela pasta azul",
|
| 61 |
+
"dá uma espiada na tela e me diz se o jogo já carregou",
|
| 62 |
+
"clica no símbolo de mais no canto da página",
|
| 63 |
+
"essa caixa de dialogo ta perguntando o que?",
|
| 64 |
+
"aperta no botão vermelho de gravar",
|
| 65 |
+
"olha o mapa aberto e me diz qual rua tá marcada",
|
| 66 |
+
"clica em cima daquele banner que apareceu",
|
| 67 |
+
"qual a porcentagem na barra de progresso",
|
| 68 |
+
"fecha a aba que tem o ícone do youtube clicando no x dela",
|
| 69 |
+
"me diz o que tem escrito naquele post-it da tela",
|
| 70 |
+
"clica no botão desabilitado? não, no que tá ativo do lado dele",
|
| 71 |
+
"que programa é esse com ícone roxo na dock",
|
| 72 |
+
"confere visualmente se a janela do zoom tá com o microfone mutado"
|
| 73 |
+
],
|
| 74 |
+
"codigo": [
|
| 75 |
+
"escreve uma função em python que inverte uma string",
|
| 76 |
+
"por que meu script bash dá 'command not found' na linha 12",
|
| 77 |
+
"como faço um for em javascript que percorre um objeto",
|
| 78 |
+
"me explica o que é recursão com um exemplo em c",
|
| 79 |
+
"tenho um IndexError: list index out of range no meu codigo, o que pode ser",
|
| 80 |
+
"cria um script python que renomeia fotos pela data",
|
| 81 |
+
"qual a diferença entre let e const no js",
|
| 82 |
+
"faz uma classe em java pra representar uma conta bancária",
|
| 83 |
+
"meu código em rust não compila, fala de borrow checker, me ajuda",
|
| 84 |
+
"escreve uma regex que valida email",
|
| 85 |
+
"converte esse loop em list comprehension: for x in lista: if x>0: novos.append(x)",
|
| 86 |
+
"como ler um arquivo csv com pandas",
|
| 87 |
+
"explica o que é uma closure",
|
| 88 |
+
"cria uma API simples com flask que retorna hello world",
|
| 89 |
+
"meu useEffect no react tá rodando infinito, por que?",
|
| 90 |
+
"escreve um programa em c++ que calcula fatorial",
|
| 91 |
+
"o que significa esse erro: TypeError: 'NoneType' object is not subscriptable",
|
| 92 |
+
"faz um script que baixa todas as imagens de uma página usando requests e beautifulsoup",
|
| 93 |
+
"como funciona async await em python",
|
| 94 |
+
"cria uma função que verifica se um número é primo",
|
| 95 |
+
"me ajuda a otimizar essa query sql que tá lenta com join",
|
| 96 |
+
"escreve testes unitários com pytest pra uma função soma",
|
| 97 |
+
"qual a diferença entre lista e tupla em python",
|
| 98 |
+
"como declaro um ponteiro em c e pra que serve",
|
| 99 |
+
"faz um jogo da velha no terminal em python",
|
| 100 |
+
"meu programa em go dá deadlock, all goroutines are asleep",
|
| 101 |
+
"explica o padrão singleton",
|
| 102 |
+
"escreve um shell script que faz backup de uma pasta com data no nome",
|
| 103 |
+
"como tratar exceção em kotlin",
|
| 104 |
+
"cria um componente react de botão com contador",
|
| 105 |
+
"o que é big O notation, com exemplos de código",
|
| 106 |
+
"gera um dockerfile pra uma aplicação node",
|
| 107 |
+
"por que meu print não aparece dentro da função, esqueci algo?",
|
| 108 |
+
"implementa uma busca binária em javascript",
|
| 109 |
+
"segmentation fault no meu programa em C, como eu debugo isso",
|
| 110 |
+
"escreve uma função lua pra um mod que spawna um item",
|
| 111 |
+
"como faço um POST com fetch passando json",
|
| 112 |
+
"explica o que o git rebase faz com os commits",
|
| 113 |
+
"tenho um NullPointerException no android studio, o que é",
|
| 114 |
+
"faz um algoritmo de ordenação bubble sort comentado",
|
| 115 |
+
"como uso o map e filter em js",
|
| 116 |
+
"cria um bot de discord em python que responde ping",
|
| 117 |
+
"qual a diferença entre == e === em javascript",
|
| 118 |
+
"escreve um código que lê a temperatura de um sensor no arduino",
|
| 119 |
+
"meu css não centraliza a div, como resolvo",
|
| 120 |
+
"transforma essa função em typescript com tipos",
|
| 121 |
+
"explica o que é um decorator em python",
|
| 122 |
+
"cria uma função recursiva de fibonacci com memoização",
|
| 123 |
+
"por que meu html não carrega o arquivo js?",
|
| 124 |
+
"como conectar num banco postgres usando python",
|
| 125 |
+
"escreve um script em powershell... não, em bash, que conta linhas de todos os .py",
|
| 126 |
+
"me explica herança e polimorfismo com exemplo",
|
| 127 |
+
"faz uma calculadora com tkinter",
|
| 128 |
+
"o compilador reclama de undefined reference to main, o que é isso",
|
| 129 |
+
"como faço um dicionário ordenado por valor em python",
|
| 130 |
+
"escreve uma função em php que conecta no mysql",
|
| 131 |
+
"refatora esse código pra ficar mais legível",
|
| 132 |
+
"cria um endpoint que recebe upload de arquivo em fastapi",
|
| 133 |
+
"o que é uma race condition em programação concorrente",
|
| 134 |
+
"como fazer um script python rodar em paralelo com multiprocessing",
|
| 135 |
+
"escreve um makefile pra compilar dois arquivos .c",
|
| 136 |
+
"meu loop while nunca termina, o que tem de errado nesse trecho",
|
| 137 |
+
"gera uma função que converte celsius pra fahrenheit em java",
|
| 138 |
+
"explica o que é orientação a objetos pra iniciante",
|
| 139 |
+
"como faço parsing de json em c#",
|
| 140 |
+
"cria um script que monitora uma pasta e avisa quando chega arquivo novo usando watchdog",
|
| 141 |
+
"qual a melhor forma de concatenar strings em java dentro de loop",
|
| 142 |
+
"por que o node dá 'cannot find module express'",
|
| 143 |
+
"escreve um hook customizado em react pra buscar dados",
|
| 144 |
+
"comenta cada linha desse codigo em python pra eu entender"
|
| 145 |
+
],
|
| 146 |
+
"tecnico": [
|
| 147 |
+
"meu wifi para de funcionar depois que o notebook suspende",
|
| 148 |
+
"como instalo o steam no fedora",
|
| 149 |
+
"o que faz o comando chmod 755",
|
| 150 |
+
"o som sumiu depois da atualização do ubuntu, como resolvo",
|
| 151 |
+
"como vejo quanto espaço livre tem no disco pelo terminal",
|
| 152 |
+
"driver da nvidia não carrega, fica tela preta no boot",
|
| 153 |
+
"qual a diferença entre apt e snap",
|
| 154 |
+
"como adiciono um repositorio ppa",
|
| 155 |
+
"meu bluetooth não acha os fones no mint",
|
| 156 |
+
"o que é o systemd e pra que serve",
|
| 157 |
+
"como faço pra um programa iniciar junto com o sistema no linux",
|
| 158 |
+
"dá erro de dependência quebrada quando tento instalar pacote",
|
| 159 |
+
"como mudo a senha do root",
|
| 160 |
+
"o que significa kernel panic",
|
| 161 |
+
"meu pc com arch não inicia depois do pacman -Syu",
|
| 162 |
+
"como monto um pendrive pelo terminal",
|
| 163 |
+
"o que é swap e quanto eu preciso",
|
| 164 |
+
"touchpad parou de funcionar no pop os, ajuda",
|
| 165 |
+
"como descubro qual placa de vídeo eu tenho no linux",
|
| 166 |
+
"explica as permissões rwx",
|
| 167 |
+
"como instalo o flatpak do discord",
|
| 168 |
+
"o grub sumiu depois que instalei o windows, como recupero",
|
| 169 |
+
"por que o apt fica travado em 'aguardando pelo bloqueio'",
|
| 170 |
+
"como atualizo o kernel no debian",
|
| 171 |
+
"tela piscando no wayland, como troco pra xorg",
|
| 172 |
+
"o que faz o sudo exatamente",
|
| 173 |
+
"como verifico quais processos tão comendo memória",
|
| 174 |
+
"minha impressora hp não é reconhecida no ubuntu",
|
| 175 |
+
"como crio um usuário novo pelo terminal",
|
| 176 |
+
"o que é o /etc/fstab",
|
| 177 |
+
"microfone não funciona no pipewire",
|
| 178 |
+
"como desinstalo completamente um programa com apt",
|
| 179 |
+
"o sistema tá muito lento no boot, como vejo o que demora",
|
| 180 |
+
"como configuro ip fixo no linux",
|
| 181 |
+
"o que é um arquivo .deb e como instalo",
|
| 182 |
+
"erro 'permission denied' ao rodar um executável que baixei",
|
| 183 |
+
"como instalo drivers de wifi realtek no linux",
|
| 184 |
+
"monitor externo não é detectado no kubuntu",
|
| 185 |
+
"como agendo uma tarefa com cron",
|
| 186 |
+
"qual a diferença entre ext4 e btrfs",
|
| 187 |
+
"como vejo os logs do sistema com journalctl",
|
| 188 |
+
"o ollama não usa minha gpu, só a cpu",
|
| 189 |
+
"como formato um hd pelo gparted",
|
| 190 |
+
"meu teclado tá com layout errado, ç não funciona",
|
| 191 |
+
"o que é um ambiente gráfico tipo gnome ou kde",
|
| 192 |
+
"como instalo o java no ubuntu",
|
| 193 |
+
"depois de atualizar, o docker não inicia mais",
|
| 194 |
+
"como faço dual boot com linux e windows",
|
| 195 |
+
"o que significa 'no space left on device' se o disco tá vazio",
|
| 196 |
+
"como uso o comando grep pra achar texto em arquivos",
|
| 197 |
+
"como volto uma versão do pacote que quebrou",
|
| 198 |
+
"tela preta depois do login no gnome",
|
| 199 |
+
"explica o que são runlevels ou targets",
|
| 200 |
+
"como compartilhar pasta entre linux e windows na rede com samba",
|
| 201 |
+
"o firefox fica sem aceleração de hardware, como ativo",
|
| 202 |
+
"como instalo programas .appimage",
|
| 203 |
+
"meu notebook esquenta muito no linux, tem como melhorar a bateria e temperatura?",
|
| 204 |
+
"como vejo a versão da minha distro",
|
| 205 |
+
"o que é o PATH e como adiciono uma pasta nele",
|
| 206 |
+
"fone usb não aparece nas saídas de áudio",
|
| 207 |
+
"como configuro o firewall ufw",
|
| 208 |
+
"erro de gpg key ao dar apt update",
|
| 209 |
+
"como trocar o shell padrão pro zsh",
|
| 210 |
+
"o que o comando dd faz e por que é perigoso",
|
| 211 |
+
"steam não abre jogos com proton, fica carregando",
|
| 212 |
+
"como descubro a temperatura da cpu no terminal",
|
| 213 |
+
"lixeira não esvazia, diz que não tenho permissão",
|
| 214 |
+
"como reinstalo o gnome sem perder meus arquivos",
|
| 215 |
+
"por que meu hd externo aparece só como leitura",
|
| 216 |
+
"como faço o nvidia-smi funcionar"
|
| 217 |
+
],
|
| 218 |
+
"acao": [
|
| 219 |
+
"abre o spotify",
|
| 220 |
+
"aumenta o volume pra 70",
|
| 221 |
+
"desliga o bluetooth",
|
| 222 |
+
"fecha o firefox",
|
| 223 |
+
"bota o brilho no máximo",
|
| 224 |
+
"liga o modo escuro",
|
| 225 |
+
"tira um print da tela inteira",
|
| 226 |
+
"renomeia o arquivo relatorio.pdf pra relatorio_final.pdf",
|
| 227 |
+
"bloqueia o computador",
|
| 228 |
+
"desliga o pc daqui a 30 minutos",
|
| 229 |
+
"abre o terminal por favor",
|
| 230 |
+
"move as fotos da pasta Downloads pra Imagens",
|
| 231 |
+
"apaga o arquivo teste.txt da área de trabalho",
|
| 232 |
+
"muta o som",
|
| 233 |
+
"conecta no wifi de casa",
|
| 234 |
+
"abre o vscode na pasta do projeto",
|
| 235 |
+
"manda 'chego em 10 min' pro João no telegram",
|
| 236 |
+
"cria uma pasta chamada faculdade nos documentos",
|
| 237 |
+
"diminui o brilho um pouco",
|
| 238 |
+
"abre o gerenciador de arquivos",
|
| 239 |
+
"reinicia o computador",
|
| 240 |
+
"fecha todas as janelas do chrome",
|
| 241 |
+
"liga o wifi",
|
| 242 |
+
"coloca o volume no 30",
|
| 243 |
+
"abre a calculadora",
|
| 244 |
+
"digita 'bom dia a todos' no discord",
|
| 245 |
+
"desativa as notificações",
|
| 246 |
+
"suspende o notebook",
|
| 247 |
+
"abre o libreoffice writer",
|
| 248 |
+
"copia o arquivo notas.odt pro pendrive",
|
| 249 |
+
"esvazia a lixeira",
|
| 250 |
+
"troca o papel de parede pela foto praia.jpg",
|
| 251 |
+
"pausa a música",
|
| 252 |
+
"próxima música no spotify",
|
| 253 |
+
"abre o steam",
|
| 254 |
+
"ativa o modo não perturbe",
|
| 255 |
+
"liga a luz noturna",
|
| 256 |
+
"compacta a pasta projetos em zip",
|
| 257 |
+
"abre o obs",
|
| 258 |
+
"fecha o discord",
|
| 259 |
+
"escreve um lembrete no gedit dizendo comprar pão",
|
| 260 |
+
"desliga o microfone",
|
| 261 |
+
"abre as configurações de som",
|
| 262 |
+
"aumenta o brilho em 20%",
|
| 263 |
+
"modo avião ligado",
|
| 264 |
+
"abre o thunderbird e cria um email novo pro chefe",
|
| 265 |
+
"exclui a pasta temp dentro de Downloads",
|
| 266 |
+
"abre o gimp com a imagem logo.png",
|
| 267 |
+
"tira uma captura só da janela ativa",
|
| 268 |
+
"desliga a tela",
|
| 269 |
+
"abre o vlc e toca o filme.mp4",
|
| 270 |
+
"muda o idioma do teclado pra inglês",
|
| 271 |
+
"encerra a sessão",
|
| 272 |
+
"volume no mínimo",
|
| 273 |
+
"abre o blender",
|
| 274 |
+
"cola o texto copiado no bloco de notas",
|
| 275 |
+
"manda um whatsapp pra minha mãe dizendo que já saí",
|
| 276 |
+
"coloca o computador pra hibernar",
|
| 277 |
+
"ativa o tema claro",
|
| 278 |
+
"minimiza todas as janelas",
|
| 279 |
+
"abre o gnome-system-monitor",
|
| 280 |
+
"desconecta os fones bluetooth",
|
| 281 |
+
"renomeia a pasta 'nova pasta' pra 'viagem 2026'",
|
| 282 |
+
"abre o ollama no terminal e roda o qwen",
|
| 283 |
+
"liga o compartilhamento de tela no zoom",
|
| 284 |
+
"fecha o jogo que tá aberto, o minecraft",
|
| 285 |
+
"salva o documento aberto no libreoffice",
|
| 286 |
+
"abre o kerbal space program",
|
| 287 |
+
"grava a tela por 1 minuto",
|
| 288 |
+
"desliga o som do sistema e abre o rhythmbox"
|
| 289 |
+
],
|
| 290 |
+
"busca": [
|
| 291 |
+
"quanto tá o dólar hoje",
|
| 292 |
+
"quem ganhou o jogo do flamengo ontem",
|
| 293 |
+
"previsão do tempo pra francisco beltrão amanhã",
|
| 294 |
+
"qual o preço da rtx 5070 no brasil",
|
| 295 |
+
"quando lança o gta 6",
|
| 296 |
+
"últimas notícias sobre a eleição",
|
| 297 |
+
"procura um tutorial de como fazer pão caseiro no youtube",
|
| 298 |
+
"qual a tabela do brasileirão agora",
|
| 299 |
+
"review do fedora 45 vale a pena?",
|
| 300 |
+
"quanto custa uma passagem de curitiba pra são paulo semana que vem",
|
| 301 |
+
"vai chover hoje à tarde?",
|
| 302 |
+
"resultado da mega sena de sábado",
|
| 303 |
+
"quais filmes estão em cartaz no cinema",
|
| 304 |
+
"qual a cotação do bitcoin agora",
|
| 305 |
+
"o que aconteceu no mundo hoje",
|
| 306 |
+
"tem atualização nova do kerbal space program 2?",
|
| 307 |
+
"melhor notebook custo benefício 2026",
|
| 308 |
+
"procura vídeos de gameplay do novo zelda",
|
| 309 |
+
"quem é o atual presidente da argentina",
|
| 310 |
+
"horário do jogo do athletico hoje",
|
| 311 |
+
"qual a versão mais recente do ubuntu",
|
| 312 |
+
"pesquisa preço do ssd nvme 2tb no mercado livre",
|
| 313 |
+
"notícias de tecnologia dessa semana",
|
| 314 |
+
"quando sai a próxima temporada de the last of us",
|
| 315 |
+
"como tá o trânsito na br-277 agora",
|
| 316 |
+
"qual o placar de real madrid e barcelona",
|
| 317 |
+
"acha uma receita de lasanha bem avaliada",
|
| 318 |
+
"quanto tá o litro da gasolina no paraná",
|
| 319 |
+
"quais os lançamentos de jogos de outubro",
|
| 320 |
+
"procura um tutorial em vídeo de configurar o flybywire a380",
|
| 321 |
+
"quem ganhou o oscar de melhor filme esse ano",
|
| 322 |
+
"temperatura agora em curitiba",
|
| 323 |
+
"qual o preço do ryzen 9 9950x hoje",
|
| 324 |
+
"tem show de alguma banda boa em cascavel esse mês?",
|
| 325 |
+
"o que as pessoas tão falando do novo iphone",
|
| 326 |
+
"cotação do euro",
|
| 327 |
+
"pesquisa reviews do fone sony wh-1000xm6",
|
| 328 |
+
"qual o resultado da fórmula 1 no domingo",
|
| 329 |
+
"acha pra mim o site oficial pra baixar o linux mint mais recente",
|
| 330 |
+
"qual a taxa selic atual",
|
| 331 |
+
"quem tá liderando a champions",
|
| 332 |
+
"me mostra as notícias sobre o ollama lançado recentemente",
|
| 333 |
+
"qual o modelo de ia local mais novo da qwen",
|
| 334 |
+
"tempo pra semana toda em pato branco",
|
| 335 |
+
"busca onde comprar placa mãe am5 barata",
|
| 336 |
+
"vai ter feriado prolongado esse mês?",
|
| 337 |
+
"tutorial de mod de minecraft fabric 1.21 atualizado",
|
| 338 |
+
"quantos inscritos o canal do alanzoka tem agora",
|
| 339 |
+
"o que saiu de novo no kernel linux recentemente",
|
| 340 |
+
"quando é o próximo jogo da seleção",
|
| 341 |
+
"preço da ps5 pro hoje",
|
| 342 |
+
"procura um guia de build pra ssto no ksp",
|
| 343 |
+
"qual a nota do novo filme da marvel no rotten tomatoes",
|
| 344 |
+
"aconteceu algum terremoto hoje?",
|
| 345 |
+
"tem promoção na steam agora?",
|
| 346 |
+
"pesquisa como tá o preço da memória ddr5 32gb",
|
| 347 |
+
"quem foi eliminado no bbb ontem",
|
| 348 |
+
"horário de funcionamento do mercado aqui perto",
|
| 349 |
+
"qual o preço da ação da petrobras",
|
| 350 |
+
"busca vagas de emprego de programador em curitiba",
|
| 351 |
+
"quais as novidades do gnome 49",
|
| 352 |
+
"me acha um vídeo ensinando a tocar wonderwall no violão",
|
| 353 |
+
"o dólar subiu ou caiu essa semana",
|
| 354 |
+
"compara preços de monitor 144hz de 27 polegadas",
|
| 355 |
+
"quem ganhou a luta do ufc ontem à noite",
|
| 356 |
+
"qual o status dos servidores da steam agora",
|
| 357 |
+
"novidades sobre o msfs 2024 na última atualização",
|
| 358 |
+
"lista de mods populares do ksp esse ano",
|
| 359 |
+
"quanto tá a arroba do boi hoje",
|
| 360 |
+
"procura notícias da enchente no rio grande do sul"
|
| 361 |
+
],
|
| 362 |
+
"simples": [
|
| 363 |
+
"oi",
|
| 364 |
+
"bom dia tars",
|
| 365 |
+
"e aí, beleza?",
|
| 366 |
+
"valeu",
|
| 367 |
+
"obrigado pela ajuda",
|
| 368 |
+
"tchau",
|
| 369 |
+
"boa noite",
|
| 370 |
+
"tudo bem com você?",
|
| 371 |
+
"abre o youtube",
|
| 372 |
+
"entra no google",
|
| 373 |
+
"abre o gmail",
|
| 374 |
+
"vai no facebook",
|
| 375 |
+
"abre o twitter",
|
| 376 |
+
"ola",
|
| 377 |
+
"opa",
|
| 378 |
+
"brigadão, salvou minha vida",
|
| 379 |
+
"até mais",
|
| 380 |
+
"abre a netflix",
|
| 381 |
+
"falou",
|
| 382 |
+
"oi tudo certo?",
|
| 383 |
+
"entra no instagram",
|
| 384 |
+
"abre o chatgpt",
|
| 385 |
+
"bom dia! como vc tá?",
|
| 386 |
+
"muito obrigado",
|
| 387 |
+
"abre o reddit",
|
| 388 |
+
"e ai tars",
|
| 389 |
+
"valeu mesmo, ajudou demais",
|
| 390 |
+
"abre a twitch",
|
| 391 |
+
"tamo junto",
|
| 392 |
+
"boa tarde",
|
| 393 |
+
"entra no github",
|
| 394 |
+
"abre o linkedin",
|
| 395 |
+
"fui, até amanhã",
|
| 396 |
+
"oii",
|
| 397 |
+
"blz",
|
| 398 |
+
"abre o mercado livre",
|
| 399 |
+
"thanks",
|
| 400 |
+
"abre a wikipédia",
|
| 401 |
+
"salve",
|
| 402 |
+
"eai como vai",
|
| 403 |
+
"abre o whatsapp web",
|
| 404 |
+
"entra na amazon",
|
| 405 |
+
"tudo tranquilo?",
|
| 406 |
+
"obrigada",
|
| 407 |
+
"beleza, era só isso",
|
| 408 |
+
"abre o site da globo",
|
| 409 |
+
"até logo",
|
| 410 |
+
"opa, bom dia",
|
| 411 |
+
"abre o duolingo",
|
| 412 |
+
"entra no tiktok",
|
| 413 |
+
"show, valeu",
|
| 414 |
+
"nossa obrigado",
|
| 415 |
+
"abre o outlook",
|
| 416 |
+
"fala tars",
|
| 417 |
+
"abre o pinterest",
|
| 418 |
+
"hello",
|
| 419 |
+
"de nada",
|
| 420 |
+
"abre o google maps",
|
| 421 |
+
"tenha um bom dia",
|
| 422 |
+
"entra no uol",
|
| 423 |
+
"obg",
|
| 424 |
+
"boa madrugada kkk",
|
| 425 |
+
"abre o spotify web no navegador",
|
| 426 |
+
"ok, obrigado",
|
| 427 |
+
"como vai você hoje?",
|
| 428 |
+
"abre o gov.br",
|
| 429 |
+
"flw",
|
| 430 |
+
"abre o stack overflow",
|
| 431 |
+
"agradeço",
|
| 432 |
+
"abre o prime video"
|
| 433 |
+
],
|
| 434 |
+
"geral": [
|
| 435 |
+
"explica o que é fotossíntese",
|
| 436 |
+
"escreve um poema sobre o outono",
|
| 437 |
+
"traduz 'where is the library' pro português",
|
| 438 |
+
"quanto é 15% de 340",
|
| 439 |
+
"me dá ideias de nome pra um gato",
|
| 440 |
+
"resume a história da revolução francesa",
|
| 441 |
+
"escreve um email pedindo férias pro meu chefe",
|
| 442 |
+
"qual a diferença entre vírus e bactéria",
|
| 443 |
+
"como funciona um motor a combustão",
|
| 444 |
+
"me conta uma piada",
|
| 445 |
+
"qual a capital da austrália",
|
| 446 |
+
"escreve uma mensagem de aniversário pra minha avó",
|
| 447 |
+
"explica a teoria da relatividade de forma simples",
|
| 448 |
+
"quantos ossos tem o corpo humano",
|
| 449 |
+
"me dá dicas pra dormir melhor",
|
| 450 |
+
"traduz esse texto pro inglês: estou muito feliz em conhecer vocês",
|
| 451 |
+
"como se calcula a área de um círculo",
|
| 452 |
+
"escreve uma história curta de ficção científica",
|
| 453 |
+
"qual a diferença entre mas e mais",
|
| 454 |
+
"me ajuda a montar um treino de corrida pra iniciante",
|
| 455 |
+
"o que foi a guerra fria",
|
| 456 |
+
"cria um roteiro de estudos pra aprender xadrez",
|
| 457 |
+
"como funciona um buraco negro",
|
| 458 |
+
"escreve uma carta de apresentação pra vaga de estágio",
|
| 459 |
+
"qual o plural de cidadão",
|
| 460 |
+
"dá sugestões de presente pro dia dos pais",
|
| 461 |
+
"explica o que é inflação",
|
| 462 |
+
"resolve essa equação: 2x + 5 = 17",
|
| 463 |
+
"escreve uma legenda engraçada pra foto do meu cachorro",
|
| 464 |
+
"quem pintou a mona lisa",
|
| 465 |
+
"como fazer um bom discurso de formatura",
|
| 466 |
+
"me explica como funciona um avião voar",
|
| 467 |
+
"qual a diferença entre clima e tempo",
|
| 468 |
+
"inventa um nome pra minha banda de rock",
|
| 469 |
+
"como cuidar de uma suculenta",
|
| 470 |
+
"escreve um haicai sobre café",
|
| 471 |
+
"o que é a órbita de hohmann",
|
| 472 |
+
"converte 5 milhas pra quilômetros",
|
| 473 |
+
"me dá uma receita de bolo de cenoura",
|
| 474 |
+
"qual a origem da expressão 'pagar o pato'",
|
| 475 |
+
"explica o que é inteligência artificial pra uma criança",
|
| 476 |
+
"escreve um texto pra divulgar minha loja no instagram",
|
| 477 |
+
"quais são os planetas do sistema solar",
|
| 478 |
+
"como melhorar minha redação do enem",
|
| 479 |
+
"me ajuda a decidir entre fazer engenharia ou medicina",
|
| 480 |
+
"quanto é 12 vezes 17",
|
| 481 |
+
"escreve uma desculpa educada pra recusar um convite",
|
| 482 |
+
"o que é um número primo",
|
| 483 |
+
"traduz 'saudade' pro espanhol",
|
| 484 |
+
"resume o livro dom casmurro",
|
| 485 |
+
"qual a fórmula da água",
|
| 486 |
+
"explica a abertura siciliana no xadrez",
|
| 487 |
+
"cria um cardápio saudável pra semana",
|
| 488 |
+
"o que significa carpe diem",
|
| 489 |
+
"como funciona a democracia",
|
| 490 |
+
"escreve uma música sobre amizade",
|
| 491 |
+
"qual o maior oceano do mundo",
|
| 492 |
+
"me dá dicas pra falar em público",
|
| 493 |
+
"reescreve essa frase de um jeito mais formal: a gente vai atrasar o projeto",
|
| 494 |
+
"quem foi santos dumont",
|
| 495 |
+
"como se faz uma regra de três",
|
| 496 |
+
"explica o que é o efeito estufa",
|
| 497 |
+
"cria perguntas pra um quiz sobre história do brasil",
|
| 498 |
+
"qual a diferença entre um pássaro e um morcego",
|
| 499 |
+
"sugere atividades pra fazer num domingo chuvoso",
|
| 500 |
+
"escreve um parágrafo de introdução sobre sustentabilidade",
|
| 501 |
+
"por que o céu é azul",
|
| 502 |
+
"qual a raiz quadrada de 144",
|
| 503 |
+
"me dá conselhos pra lidar com um colega de trabalho difícil",
|
| 504 |
+
"explica como funcionam os juros compostos"
|
| 505 |
+
]
|
| 506 |
+
}
|
app/murph/gerado_limpo.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
app/murph/limpar.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Junta as frases geradas e tira: repetidas, já existentes, e qualquer uma
|
| 2 |
+
AVISO (4.0 Endurance Neo): este script de desenvolvimento usa o tars_classificador.py
|
| 3 |
+
(Naive Bayes), que saiu do openTARS. Pra rodar, pegue esse arquivo da 4.0 Endurance.
|
| 4 |
+
parecida com uma frase de teste EM QUALQUER IDIOMA.
|
| 5 |
+
|
| 6 |
+
As frases de teste entram aqui nos 5 idiomas: as da avaliação já existem
|
| 7 |
+
traduzidas (idiomas/*.json) e as de tests/frases_classificador.py foram
|
| 8 |
+
traduzidas só pra este filtro (filtro_traducoes_teste.json). Assim some
|
| 9 |
+
também a TRADUÇÃO de uma frase de teste, não só a cópia.
|
| 10 |
+
|
| 11 |
+
Sai: parecida (pedaços de letras ou palavras) OU que divide com uma frase
|
| 12 |
+
de teste uma palavra rara (número de 2+ dígitos, ou palavra que quase não
|
| 13 |
+
aparece no resto dos dados, tipo "mona", "framework").
|
| 14 |
+
"""
|
| 15 |
+
import glob
|
| 16 |
+
import json
|
| 17 |
+
import os
|
| 18 |
+
import re
|
| 19 |
+
import sys
|
| 20 |
+
|
| 21 |
+
AQUI = os.path.dirname(os.path.abspath(__file__))
|
| 22 |
+
sys.path.insert(0, AQUI)
|
| 23 |
+
from dados import teste, treino, RAIZ, TAREFAS # noqa: E402
|
| 24 |
+
sys.path.insert(0, RAIZ)
|
| 25 |
+
import tars_classificador as cl # noqa: E402
|
| 26 |
+
from sklearn.feature_extraction.text import TfidfVectorizer # noqa: E402
|
| 27 |
+
from sklearn.metrics.pairwise import cosine_similarity # noqa: E402
|
| 28 |
+
|
| 29 |
+
av, ex = teste()
|
| 30 |
+
T = [f for f, _, _ in av + ex]
|
| 31 |
+
for item in json.load(open(os.path.join(AQUI, "filtro_traducoes_teste.json"), encoding="utf-8")):
|
| 32 |
+
T += [item[k] for k in ("pt_BR", "en", "es", "fr", "de") if item.get(k)]
|
| 33 |
+
existentes = {cl.normalizar(f) for f, _ in treino()}
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def palavras(f):
|
| 37 |
+
return set(cl.tokens(cl.normalizar(f))) - cl.VAZIAS
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
gerado, vistos = [], set()
|
| 41 |
+
for arq in sorted(glob.glob(os.path.join(AQUI, "gerado", "*.json"))):
|
| 42 |
+
idioma = os.path.basename(arq)[:-5]
|
| 43 |
+
for cat, lista in json.load(open(arq, encoding="utf-8")).items():
|
| 44 |
+
assert cat in TAREFAS, cat
|
| 45 |
+
for f in lista:
|
| 46 |
+
k = cl.normalizar(f)
|
| 47 |
+
if k in vistos or k in existentes:
|
| 48 |
+
continue
|
| 49 |
+
vistos.add(k)
|
| 50 |
+
gerado.append((f, cat, idioma))
|
| 51 |
+
|
| 52 |
+
# frequência de cada palavra em todos os dados de treino (pra achar as raras)
|
| 53 |
+
df = {}
|
| 54 |
+
for f in [g[0] for g in gerado] + [f for f, _ in treino()]:
|
| 55 |
+
for w in palavras(f):
|
| 56 |
+
df[w] = df.get(w, 0) + 1
|
| 57 |
+
Tp = [palavras(t) for t in T]
|
| 58 |
+
raras_teste = set()
|
| 59 |
+
for p in Tp:
|
| 60 |
+
for w in p:
|
| 61 |
+
if re.fullmatch(r"\d{2,}", w) or (len(w) >= 4 and df.get(w, 0) <= 2):
|
| 62 |
+
raras_teste.add(w)
|
| 63 |
+
|
| 64 |
+
vec = TfidfVectorizer(analyzer="char_wb", ngram_range=(3, 5)).fit([g[0] for g in gerado] + T)
|
| 65 |
+
sim = cosine_similarity(vec.transform([g[0] for g in gerado]), vec.transform(T))
|
| 66 |
+
limpo, fora = [], []
|
| 67 |
+
for i, (f, cat, idi) in enumerate(gerado):
|
| 68 |
+
a = palavras(f)
|
| 69 |
+
jac = max((len(a & b) / len(a | b) if a and b else 0) for b in Tp)
|
| 70 |
+
rara = a & raras_teste
|
| 71 |
+
if sim[i].max() >= 0.6 or jac >= 0.4 or rara:
|
| 72 |
+
fora.append((f, T[sim[i].argmax()], round(float(sim[i].max()), 2), round(jac, 2), sorted(rara)))
|
| 73 |
+
else:
|
| 74 |
+
limpo.append((f, cat, idi))
|
| 75 |
+
with open(os.path.join(AQUI, "gerado_limpo.json"), "w", encoding="utf-8") as saida:
|
| 76 |
+
json.dump(limpo, saida, ensure_ascii=False, indent=0)
|
| 77 |
+
print(f"geradas {len(gerado)} · ficaram {len(limpo)} · saíram por parecer teste {len(fora)}")
|
| 78 |
+
if "-v" in sys.argv:
|
| 79 |
+
for x in fora:
|
| 80 |
+
print(" ", x)
|
app/murph/tars_exemplos.py
ADDED
|
@@ -0,0 +1,550 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Frases de exemplo de cada tarefa.
|
| 2 |
+
|
| 3 |
+
Usadas pela helper Murph (tars_murph.py), que é treinada com elas (o
|
| 4 |
+
treino fica em murph/; o modelo pronto, em modelos/murph.json).
|
| 5 |
+
|
| 6 |
+
Os idiomas ficam misturados de propósito: um exemplo em português também
|
| 7 |
+
ajuda a reconhecer um pedido em alemão (pedaços de palavra e sentido
|
| 8 |
+
parecidos).
|
| 9 |
+
|
| 10 |
+
Não repetem as frases do --avaliar-classificador (idiomas/*.json,
|
| 11 |
+
"avaliacao") nem as de tests/frases_classificador.py, senão a nota das
|
| 12 |
+
avaliações sairia inflada.
|
| 13 |
+
|
| 14 |
+
Pra melhorar a detecção: acrescente frases reais que caíram na tarefa
|
| 15 |
+
errada. (A Murph aprende com elas quando é treinada de novo: murph/treinar_murph.py.)
|
| 16 |
+
|
| 17 |
+
O que separa as tarefas parecidas:
|
| 18 |
+
visao x acao visao precisa OLHAR a tela (ícone, cor, posição, "esse
|
| 19 |
+
botão", "o que aparece"); acao faz algo que tem nome
|
| 20 |
+
(abrir app, volume, wifi, arquivo com nome)
|
| 21 |
+
tecnico x acao tecnico é resolver/entender o sistema (algo quebrado,
|
| 22 |
+
"como faço", instalar, comando); acao é "faz isso agora"
|
| 23 |
+
codigo x tecnico codigo é escrever/consertar PROGRAMA; tecnico é Linux
|
| 24 |
+
busca x geral busca precisa da internet (preço, notícia, vídeo,
|
| 25 |
+
resultado, data de lançamento, tutorial pronto); geral a
|
| 26 |
+
IA responde sozinha (explicar, escrever, ideias)
|
| 27 |
+
simples cumprimento, agradecimento ou só abrir um site conhecido
|
| 28 |
+
"""
|
| 29 |
+
|
| 30 |
+
EXEMPLOS = {
|
| 31 |
+
"visao": [
|
| 32 |
+
"o que tem na minha tela agora",
|
| 33 |
+
"dá uma olhada nessa janela e me diz o que ela quer",
|
| 34 |
+
"clica no botão verde lá embaixo",
|
| 35 |
+
"tira um print e me fala o que você vê",
|
| 36 |
+
"que erro é esse que apareceu na tela",
|
| 37 |
+
"passa o mouse em cima daquele menu",
|
| 38 |
+
"rola a página até o final e lê o que está escrito",
|
| 39 |
+
"o que diz essa notificação no canto",
|
| 40 |
+
"arrasta a janela pro outro monitor",
|
| 41 |
+
"vê se o download já terminou na tela",
|
| 42 |
+
"clica naquele ícone de engrenagem",
|
| 43 |
+
"aperta o botão azul do lado direito",
|
| 44 |
+
"clica no link que tá no meio da página",
|
| 45 |
+
"fecha esse aviso que apareceu clicando no x",
|
| 46 |
+
"que janela é essa que abriu do nada",
|
| 47 |
+
"lê o texto que está naquela caixa",
|
| 48 |
+
"o que está escrito no título da janela",
|
| 49 |
+
"me fala o que aparece no canto inferior da tela",
|
| 50 |
+
"descreve essa imagem que está aberta",
|
| 51 |
+
"tem algum botão de confirmar aí?",
|
| 52 |
+
"clica duas vezes naquele arquivo da área de trabalho",
|
| 53 |
+
"arrasta essa imagem pra dentro da conversa",
|
| 54 |
+
"seleciona o texto do primeiro parágrafo com o mouse",
|
| 55 |
+
"clica com o botão direito no ícone da barra",
|
| 56 |
+
"qual é o número que aparece na calculadora",
|
| 57 |
+
"procura na tela onde fica o botão de salvar",
|
| 58 |
+
"o que está tocando no player agora",
|
| 59 |
+
"em que página do site eu estou",
|
| 60 |
+
"que cor é o ícone do lado do relógio",
|
| 61 |
+
"look at my screen and tell me what's wrong",
|
| 62 |
+
"click the blue link in the middle of the page",
|
| 63 |
+
"what does this popup say",
|
| 64 |
+
"take a screenshot and describe it",
|
| 65 |
+
"scroll down and read the terms for me",
|
| 66 |
+
"is there any error message showing right now",
|
| 67 |
+
"tap the gear icon in the corner",
|
| 68 |
+
"hit the green button at the bottom right",
|
| 69 |
+
"what is written on that banner",
|
| 70 |
+
"drag the window to the left half of the screen",
|
| 71 |
+
"which app is in front right now",
|
| 72 |
+
"move the pointer over the menu bar",
|
| 73 |
+
"right click on that icon",
|
| 74 |
+
"what's the number shown on the display",
|
| 75 |
+
"close that dialog by pressing the x",
|
| 76 |
+
"double click the folder on the desktop",
|
| 77 |
+
"mira mi pantalla y dime qué ves",
|
| 78 |
+
"haz clic en el botón de aceptar",
|
| 79 |
+
"qué dice esa ventana emergente",
|
| 80 |
+
"pulsa el icono verde de abajo",
|
| 81 |
+
"arrastra la ventana al otro monitor",
|
| 82 |
+
"regarde mon écran et dis-moi ce qui s'affiche",
|
| 83 |
+
"clique sur le bouton en haut à droite",
|
| 84 |
+
"qu'est-ce qui est affiché dans cette fenêtre",
|
| 85 |
+
"fais un clic droit sur cette icône",
|
| 86 |
+
"schau auf meinen Bildschirm und sag mir, was da steht",
|
| 87 |
+
"klick auf den grünen Knopf unten",
|
| 88 |
+
"was steht in diesem Fenster",
|
| 89 |
+
"zieh das Fenster auf den anderen Monitor",
|
| 90 |
+
"o que aparece nessa janela",
|
| 91 |
+
"lê o que está na tela pra mim",
|
| 92 |
+
"clica no ícone da lixeira",
|
| 93 |
+
"what do you see on the screen",
|
| 94 |
+
"read the text in this window",
|
| 95 |
+
"click the icon with the magnifying glass",
|
| 96 |
+
"qué ves en la pantalla",
|
| 97 |
+
"haz clic en el icono de la papelera",
|
| 98 |
+
"lee lo que pone en esta ventana",
|
| 99 |
+
"qu'est-ce que tu vois à l'écran",
|
| 100 |
+
"clique sur l'icône de la corbeille",
|
| 101 |
+
"lis le texte de cette fenêtre",
|
| 102 |
+
"was siehst du auf dem Bildschirm",
|
| 103 |
+
"klick auf das Symbol mit der Lupe",
|
| 104 |
+
"lies mir den Text in diesem Fenster vor",
|
| 105 |
+
"welches Programm ist gerade im Vordergrund",
|
| 106 |
+
"em qual aba eu estou agora",
|
| 107 |
+
"what tab am I on",
|
| 108 |
+
"qué ventana tengo seleccionada",
|
| 109 |
+
],
|
| 110 |
+
"codigo": [
|
| 111 |
+
"escreve uma função que inverte uma string",
|
| 112 |
+
"meu código python dá erro de indentação",
|
| 113 |
+
"como faço uma requisição http em javascript",
|
| 114 |
+
"cria uma classe em java pra representar um carro",
|
| 115 |
+
"explica o que esse trecho de código faz",
|
| 116 |
+
"corrige esse bug no meu for",
|
| 117 |
+
"faz um programa em c que lê um arquivo",
|
| 118 |
+
"como uso async await no node",
|
| 119 |
+
"me mostra um exemplo de regex para validar email",
|
| 120 |
+
"converte esse código de python pra rust",
|
| 121 |
+
"como faço um while em python",
|
| 122 |
+
"o que significa null pointer exception",
|
| 123 |
+
"meu array em javascript fica vazio depois do map",
|
| 124 |
+
"escreve um programa que conta as palavras de um texto",
|
| 125 |
+
"como leio um json em python",
|
| 126 |
+
"cria uma api simples com flask",
|
| 127 |
+
"qual a diferença entre lista e tupla em python",
|
| 128 |
+
"como declaro uma variável global em c++",
|
| 129 |
+
"meu script em python não encontra o módulo requests",
|
| 130 |
+
"faz um algoritmo de ordenação bubble sort",
|
| 131 |
+
"como conecto no banco de dados mysql pelo node",
|
| 132 |
+
"o compilador reclama de ponto e vírgula faltando",
|
| 133 |
+
"escreve testes unitários pra essa função",
|
| 134 |
+
"como faço um componente de botão no react",
|
| 135 |
+
"why does my loop never stop in javascript",
|
| 136 |
+
"write a python function that sorts a dictionary by value",
|
| 137 |
+
"fix this TypeError in my react component",
|
| 138 |
+
"how do I read a csv file with pandas",
|
| 139 |
+
"refactor this function to be faster",
|
| 140 |
+
"write a bash script that backs up my home folder",
|
| 141 |
+
"what does this python error mean: list index out of range",
|
| 142 |
+
"how do I make a class in typescript",
|
| 143 |
+
"my go program deadlocks when I use channels",
|
| 144 |
+
"write a function that checks if a number is prime",
|
| 145 |
+
"explain what a closure is in javascript",
|
| 146 |
+
"how do I parse arguments in a python script",
|
| 147 |
+
"convert this for loop to a list comprehension",
|
| 148 |
+
"why is my recursive function so slow",
|
| 149 |
+
"my c++ code crashes with a segfault on this line",
|
| 150 |
+
"escribe una función en python que sume dos números",
|
| 151 |
+
"por qué mi código da un error de índice",
|
| 152 |
+
"cómo hago un bucle for en javascript",
|
| 153 |
+
"crea una clase en python para una cuenta bancaria",
|
| 154 |
+
"écris une fonction javascript qui trie un tableau",
|
| 155 |
+
"pourquoi mon programme python plante",
|
| 156 |
+
"comment faire une boucle en java",
|
| 157 |
+
"corrige cette erreur de syntaxe dans mon code",
|
| 158 |
+
"schreib eine Funktion in Python, die Primzahlen findet",
|
| 159 |
+
"warum kompiliert mein C++ Code nicht",
|
| 160 |
+
"wie lese ich eine Datei in Java ein",
|
| 161 |
+
"erklär mir diesen Code Schritt für Schritt",
|
| 162 |
+
"cómo uso un diccionario en python",
|
| 163 |
+
"mi programa en java lanza una excepción",
|
| 164 |
+
"écris une requête sql pour trier les clients",
|
| 165 |
+
"comment déclarer une classe en python",
|
| 166 |
+
"wie schreibe ich eine Funktion in JavaScript",
|
| 167 |
+
"mein Python Skript wirft einen Fehler",
|
| 168 |
+
"how do I write a query that joins two tables",
|
| 169 |
+
"faz uma consulta sql que soma as vendas por mês",
|
| 170 |
+
],
|
| 171 |
+
"tecnico": [
|
| 172 |
+
"o pip reclama de externally managed environment",
|
| 173 |
+
"como vejo os logs do systemd de ontem",
|
| 174 |
+
"meu wifi não conecta depois que atualizei o ubuntu",
|
| 175 |
+
"como instalo o driver da nvidia no linux mint",
|
| 176 |
+
"o grub sumiu depois de instalar o windows",
|
| 177 |
+
"qual comando mostra o espaço livre no disco",
|
| 178 |
+
"como dou permissão de execução pra um arquivo",
|
| 179 |
+
"o som parou de funcionar depois do update",
|
| 180 |
+
"como adiciono um repositório ppa",
|
| 181 |
+
"meu pc está lento, como vejo o que está consumindo memória",
|
| 182 |
+
"flatpak ou snap, qual é melhor",
|
| 183 |
+
"como instalo um programa .deb",
|
| 184 |
+
"o que é o sudo e quando eu preciso usar",
|
| 185 |
+
"como vejo qual processo está usando a porta 8080",
|
| 186 |
+
"meu notebook esquenta muito no linux",
|
| 187 |
+
"como configuro o ssh pra entrar sem senha",
|
| 188 |
+
"o sistema não reconhece meu pendrive",
|
| 189 |
+
"como formato um hd externo em ext4",
|
| 190 |
+
"a tela fica preta depois do login",
|
| 191 |
+
"como mudo o dns no linux",
|
| 192 |
+
"como descubro quantos núcleos tem meu processador",
|
| 193 |
+
"o docker diz permission denied no socket",
|
| 194 |
+
"qual a diferença entre apt e apt-get",
|
| 195 |
+
"como faço o linux iniciar um programa sozinho no boot",
|
| 196 |
+
"minha impressora não funciona no zorin",
|
| 197 |
+
"o ollama não está usando minha placa de vídeo",
|
| 198 |
+
"como vejo a temperatura da cpu no terminal",
|
| 199 |
+
"how do I mount an external drive from the terminal",
|
| 200 |
+
"my laptop won't suspend on linux",
|
| 201 |
+
"how do I install docker on debian",
|
| 202 |
+
"the screen flickers after installing the new kernel",
|
| 203 |
+
"what does chmod 755 mean",
|
| 204 |
+
"how do I check which kernel version I'm running",
|
| 205 |
+
"my touchpad stopped working after the update",
|
| 206 |
+
"how do I create a swap file",
|
| 207 |
+
"ubuntu says my disk is almost full, what can I delete safely",
|
| 208 |
+
"how do I set a static ip on linux",
|
| 209 |
+
"the system freezes when I open many tabs",
|
| 210 |
+
"how do I downgrade a package with apt",
|
| 211 |
+
"what is the difference between wayland and x11",
|
| 212 |
+
"my headphones are not detected by pulseaudio",
|
| 213 |
+
"cómo instalo un programa desde la terminal en ubuntu",
|
| 214 |
+
"mi linux no detecta la impresora",
|
| 215 |
+
"cómo veo cuánta ram estoy usando en linux",
|
| 216 |
+
"el wifi se desconecta todo el tiempo en ubuntu",
|
| 217 |
+
"comment installer un paquet deb sur ubuntu",
|
| 218 |
+
"mon wifi ne marche plus sous linux",
|
| 219 |
+
"comment voir l'espace disque restant en ligne de commande",
|
| 220 |
+
"mon son ne marche plus depuis la mise à jour",
|
| 221 |
+
"wie installiere ich Treiber unter Linux",
|
| 222 |
+
"mein Linux bootet nicht mehr nach dem Update",
|
| 223 |
+
"wie sehe ich, welcher Prozess so viel Speicher braucht",
|
| 224 |
+
"mein WLAN funktioniert unter Ubuntu nicht",
|
| 225 |
+
"o que é uma partição de swap",
|
| 226 |
+
"como vejo a versão do meu linux",
|
| 227 |
+
"cómo actualizo el kernel en ubuntu",
|
| 228 |
+
"qué es un sistema de archivos",
|
| 229 |
+
"comment mettre à jour le noyau linux",
|
| 230 |
+
"quelle commande pour voir les processus",
|
| 231 |
+
"was ist ein Dateisystem",
|
| 232 |
+
"wie aktualisiere ich den Kernel",
|
| 233 |
+
"welcher Befehl zeigt den freien Speicherplatz",
|
| 234 |
+
"mi portátil no suspende en linux",
|
| 235 |
+
"mon ordinateur est très lent sous ubuntu",
|
| 236 |
+
"mein Laptop wird unter Linux sehr heiß",
|
| 237 |
+
],
|
| 238 |
+
"acao": [
|
| 239 |
+
"apaga os arquivos temporários da área de trabalho",
|
| 240 |
+
"abre a pasta de downloads",
|
| 241 |
+
"fecha todas as janelas do navegador",
|
| 242 |
+
"diminui o brilho da tela",
|
| 243 |
+
"cria uma pasta chamada projetos na área de trabalho",
|
| 244 |
+
"copia esse texto pra área de transferência",
|
| 245 |
+
"desliga o wifi",
|
| 246 |
+
"abre o gerenciador de arquivos",
|
| 247 |
+
"coloca o volume no mudo",
|
| 248 |
+
"abre a calculadora e faz 15 vezes 4",
|
| 249 |
+
"cria um arquivo de texto com a lista de compras",
|
| 250 |
+
"liga o wifi de novo",
|
| 251 |
+
"abaixa o som",
|
| 252 |
+
"sobe o volume pra 80 por cento",
|
| 253 |
+
"tira o som do computador",
|
| 254 |
+
"ativa o bluetooth",
|
| 255 |
+
"conecta no fone bluetooth",
|
| 256 |
+
"ativa o modo noturno",
|
| 257 |
+
"muda o papel de parede",
|
| 258 |
+
"desliga o computador daqui a meia hora",
|
| 259 |
+
"reinicia o pc",
|
| 260 |
+
"bloqueia a tela",
|
| 261 |
+
"renomeia a pasta fotos para viagem",
|
| 262 |
+
"move o pdf da pasta downloads pros documentos",
|
| 263 |
+
"apaga o arquivo teste.py",
|
| 264 |
+
"copia a pasta projetos pro pendrive",
|
| 265 |
+
"esvazia a pasta de downloads",
|
| 266 |
+
"compacta a pasta trabalho em zip",
|
| 267 |
+
"toca a próxima música no spotify",
|
| 268 |
+
"pausa o vídeo",
|
| 269 |
+
"abre o firefox e entra no meu email",
|
| 270 |
+
"digita oi no discord",
|
| 271 |
+
"manda uma mensagem pro joão no telegram",
|
| 272 |
+
"abre o terminal",
|
| 273 |
+
"fecha o chrome",
|
| 274 |
+
"maximiza a janela do navegador",
|
| 275 |
+
"tira um print e salva na área de trabalho",
|
| 276 |
+
"aumenta a fonte do terminal",
|
| 277 |
+
"mute the sound",
|
| 278 |
+
"open the file manager",
|
| 279 |
+
"close firefox",
|
| 280 |
+
"create a folder called backup in documents",
|
| 281 |
+
"lower the volume to 30 percent",
|
| 282 |
+
"open the calculator and add 7 and 5",
|
| 283 |
+
"turn the wifi back on",
|
| 284 |
+
"enable bluetooth",
|
| 285 |
+
"switch to night light",
|
| 286 |
+
"lock the screen",
|
| 287 |
+
"restart the computer",
|
| 288 |
+
"shut down the pc in ten minutes",
|
| 289 |
+
"rename the folder pictures to photos",
|
| 290 |
+
"move all pdfs from downloads to documents",
|
| 291 |
+
"delete the file notes.txt",
|
| 292 |
+
"copy this folder to the usb drive",
|
| 293 |
+
"zip the project folder",
|
| 294 |
+
"play the next song",
|
| 295 |
+
"pause the music",
|
| 296 |
+
"change the wallpaper",
|
| 297 |
+
"turn the brightness down",
|
| 298 |
+
"abre la calculadora",
|
| 299 |
+
"cierra el navegador",
|
| 300 |
+
"sube el volumen",
|
| 301 |
+
"desactiva el wifi",
|
| 302 |
+
"mueve este archivo a documentos",
|
| 303 |
+
"ouvre le terminal",
|
| 304 |
+
"baisse le volume",
|
| 305 |
+
"active le bluetooth",
|
| 306 |
+
"renomme le dossier photos en vacances",
|
| 307 |
+
"öffne den Dateimanager",
|
| 308 |
+
"mach die Musik leiser",
|
| 309 |
+
"schalte das Bluetooth ein",
|
| 310 |
+
"lösche die Datei test.txt",
|
| 311 |
+
"verringere die Helligkeit",
|
| 312 |
+
"ativa o modo escuro",
|
| 313 |
+
"coloca o tema escuro",
|
| 314 |
+
"mueve el archivo a la papelera",
|
| 315 |
+
"vacía la papelera",
|
| 316 |
+
"cambia al tema oscuro",
|
| 317 |
+
"déplace ce fichier dans documents",
|
| 318 |
+
"vide la corbeille",
|
| 319 |
+
"passe en mode sombre",
|
| 320 |
+
"verschieb die Datei in den Ordner Dokumente",
|
| 321 |
+
"leere den Papierkorb",
|
| 322 |
+
"mach den Ton lauter",
|
| 323 |
+
"schalte den Dunkelmodus ein",
|
| 324 |
+
"cierra spotify",
|
| 325 |
+
"ferme le navigateur",
|
| 326 |
+
"schließ den Browser",
|
| 327 |
+
"silencia el ordenador",
|
| 328 |
+
"coupe le wifi",
|
| 329 |
+
],
|
| 330 |
+
"busca": [
|
| 331 |
+
"encontra reviews do galaxy s25 pra mim",
|
| 332 |
+
"pesquisa o horário do jogo do flamengo",
|
| 333 |
+
"qual a previsão do tempo pra amanhã",
|
| 334 |
+
"procura promoções de ssd de 1 tera",
|
| 335 |
+
"quem ganhou a fórmula 1 no último domingo",
|
| 336 |
+
"busca o endereço da farmácia mais perto",
|
| 337 |
+
"quanto está o bitcoin agora",
|
| 338 |
+
"procura um vídeo ensinando a fazer pão caseiro",
|
| 339 |
+
"quanto custa um iphone 16 no brasil",
|
| 340 |
+
"qual o valor do dólar hoje",
|
| 341 |
+
"quando lança o próximo jogo do zelda",
|
| 342 |
+
"vê as últimas notícias sobre economia",
|
| 343 |
+
"quero assistir vídeos de gatos engraçados",
|
| 344 |
+
"me mostra vídeos de como tocar violão",
|
| 345 |
+
"procura um tutorial de como instalar piso",
|
| 346 |
+
"acha o preço mais barato da rx 7600",
|
| 347 |
+
"qual o resultado do jogo do corinthians",
|
| 348 |
+
"quem está em primeiro no brasileirão",
|
| 349 |
+
"que filmes estão em cartaz no cinema",
|
| 350 |
+
"busca uma receita de strogonoff no google",
|
| 351 |
+
"pesquisa quanto tempo leva de carro até curitiba",
|
| 352 |
+
"quando é o próximo feriado",
|
| 353 |
+
"procura notícias sobre o lançamento do gpt",
|
| 354 |
+
"qual a cotação do euro agora",
|
| 355 |
+
"search for cheap flights to rome",
|
| 356 |
+
"look up the latest ubuntu release date",
|
| 357 |
+
"find reviews of the steam deck oled",
|
| 358 |
+
"what's the weather in london tomorrow",
|
| 359 |
+
"how much is a macbook air today",
|
| 360 |
+
"find me videos about space exploration",
|
| 361 |
+
"when is the next apple event",
|
| 362 |
+
"what are today's top headlines",
|
| 363 |
+
"find a guide on building a pc",
|
| 364 |
+
"who won the game last night",
|
| 365 |
+
"what's the current price of gold",
|
| 366 |
+
"look for a youtube video on how to fix a flat tire",
|
| 367 |
+
"when does the new season of the show come out",
|
| 368 |
+
"¿cuánto está el dólar hoy?",
|
| 369 |
+
"busca noticias sobre el mundial",
|
| 370 |
+
"cuánto cuesta una playstation 5",
|
| 371 |
+
"busca videos de recetas fáciles",
|
| 372 |
+
"cherche le prix d'un iphone d'occasion",
|
| 373 |
+
"trouve la météo de paris pour demain",
|
| 374 |
+
"cherche des vidéos sur la cuisine italienne",
|
| 375 |
+
"quand sort le prochain jeu pokémon",
|
| 376 |
+
"such mir Bewertungen für diesen Laptop",
|
| 377 |
+
"wie wird das Wetter morgen in Berlin",
|
| 378 |
+
"was kostet ein neues iPhone",
|
| 379 |
+
"zeig mir Videos über Gitarre lernen",
|
| 380 |
+
"busca un tutorial de cómo cambiar la batería del móvil",
|
| 381 |
+
"qué noticias hay hoy sobre tecnología",
|
| 382 |
+
"cuándo sale la nueva película de star wars",
|
| 383 |
+
"quién ganó el partido de ayer",
|
| 384 |
+
"trouve une vidéo pour apprendre le piano",
|
| 385 |
+
"quelles sont les nouvelles du jour",
|
| 386 |
+
"quand sort le nouvel iphone",
|
| 387 |
+
"qui a gagné le match hier soir",
|
| 388 |
+
"combien coûte une carte graphique en ce moment",
|
| 389 |
+
"finde ein Video, wie man Brot backt",
|
| 390 |
+
"was gibt es heute für Nachrichten",
|
| 391 |
+
"wann kommt der neue Film raus",
|
| 392 |
+
"wer hat gestern das Spiel gewonnen",
|
| 393 |
+
"wie viel kostet eine Grafikkarte gerade",
|
| 394 |
+
"quais as notícias de tecnologia de hoje",
|
| 395 |
+
"quando sai o novo filme do batman",
|
| 396 |
+
],
|
| 397 |
+
"simples": [
|
| 398 |
+
"opa, beleza?",
|
| 399 |
+
"oi, tudo bem?",
|
| 400 |
+
"obrigado pela ajuda",
|
| 401 |
+
"entra no youtube",
|
| 402 |
+
"abre o instagram",
|
| 403 |
+
"até mais",
|
| 404 |
+
"oi",
|
| 405 |
+
"olá",
|
| 406 |
+
"bom dia",
|
| 407 |
+
"boa tarde, tudo tranquilo?",
|
| 408 |
+
"fala tars",
|
| 409 |
+
"brigado",
|
| 410 |
+
"valeu mano",
|
| 411 |
+
"tchau, até amanhã",
|
| 412 |
+
"show, obrigado",
|
| 413 |
+
"abre o netflix",
|
| 414 |
+
"entra no facebook",
|
| 415 |
+
"abre o site da amazon",
|
| 416 |
+
"vai no twitter",
|
| 417 |
+
"hello there",
|
| 418 |
+
"thank you so much",
|
| 419 |
+
"open instagram",
|
| 420 |
+
"go to youtube",
|
| 421 |
+
"hi",
|
| 422 |
+
"hey tars",
|
| 423 |
+
"good afternoon",
|
| 424 |
+
"thanks, that's all",
|
| 425 |
+
"see you later",
|
| 426 |
+
"open netflix",
|
| 427 |
+
"go to amazon",
|
| 428 |
+
"hola, ¿qué tal?",
|
| 429 |
+
"gracias",
|
| 430 |
+
"buenos días",
|
| 431 |
+
"abre youtube",
|
| 432 |
+
"salut, ça va ?",
|
| 433 |
+
"merci beaucoup",
|
| 434 |
+
"bonsoir",
|
| 435 |
+
"ouvre youtube",
|
| 436 |
+
"hallo, wie geht's?",
|
| 437 |
+
"danke schön",
|
| 438 |
+
"guten Morgen",
|
| 439 |
+
"öffne youtube",
|
| 440 |
+
"e aí",
|
| 441 |
+
"fala aí, tudo certo?",
|
| 442 |
+
"bom dia, tudo joia?",
|
| 443 |
+
"muito obrigado",
|
| 444 |
+
"hey, what's going on",
|
| 445 |
+
"good evening",
|
| 446 |
+
"how's it going",
|
| 447 |
+
"qué tal",
|
| 448 |
+
"muchas gracias",
|
| 449 |
+
"hasta luego",
|
| 450 |
+
"coucou",
|
| 451 |
+
"bonne nuit",
|
| 452 |
+
"à plus tard",
|
| 453 |
+
"servus",
|
| 454 |
+
"tschüss",
|
| 455 |
+
"vielen Dank",
|
| 456 |
+
"gute Nacht",
|
| 457 |
+
"abre o gmail",
|
| 458 |
+
"open gmail",
|
| 459 |
+
"abre el correo de gmail",
|
| 460 |
+
"como vai você?",
|
| 461 |
+
"how are you doing",
|
| 462 |
+
"¿cómo te va?",
|
| 463 |
+
"comment vas-tu",
|
| 464 |
+
"wie geht es dir",
|
| 465 |
+
"entra no whatsapp",
|
| 466 |
+
],
|
| 467 |
+
"geral": [
|
| 468 |
+
"por que o céu é azul",
|
| 469 |
+
"me ajuda a escrever um e-mail pedindo folga",
|
| 470 |
+
"qual a capital da austrália",
|
| 471 |
+
"me conta uma curiosidade sobre o espaço",
|
| 472 |
+
"como funciona a fotossíntese",
|
| 473 |
+
"me dá dicas pra estudar melhor",
|
| 474 |
+
"escreve uma mensagem de aniversário pra minha mãe",
|
| 475 |
+
"quem foi santos dumont",
|
| 476 |
+
"me sugere um livro de ficção científica",
|
| 477 |
+
"explica a teoria da relatividade de um jeito simples",
|
| 478 |
+
"quanto é 12 vezes 17",
|
| 479 |
+
"qual a diferença entre clima e tempo",
|
| 480 |
+
"me conta uma piada",
|
| 481 |
+
"escreve uma história curta sobre um dragão",
|
| 482 |
+
"me ajuda a montar uma rotina de treino",
|
| 483 |
+
"o que significa a palavra saudade",
|
| 484 |
+
"como eu peço desculpas pra um amigo",
|
| 485 |
+
"me explica o que é inteligência artificial",
|
| 486 |
+
"qual o maior planeta do sistema solar",
|
| 487 |
+
"traduz essa frase pro espanhol: bom dia a todos",
|
| 488 |
+
"me dá ideias de presente pro dia dos pais",
|
| 489 |
+
"resume a história do império romano",
|
| 490 |
+
"o que eu faço pra janta hoje",
|
| 491 |
+
"como funciona um motor a combustão",
|
| 492 |
+
"help me write an email asking for time off",
|
| 493 |
+
"why do cats purr",
|
| 494 |
+
"give me ideas for a birthday party",
|
| 495 |
+
"what is the meaning of the word serendipity",
|
| 496 |
+
"write a short story about a robot",
|
| 497 |
+
"how does the immune system work",
|
| 498 |
+
"who painted the starry night",
|
| 499 |
+
"summarize the plot of hamlet",
|
| 500 |
+
"what's 25 percent of 80",
|
| 501 |
+
"give me tips to sleep better",
|
| 502 |
+
"write a haiku about autumn",
|
| 503 |
+
"explain inflation like I'm five",
|
| 504 |
+
"how many continents are there",
|
| 505 |
+
"¿por qué el mar es salado?",
|
| 506 |
+
"escríbeme un poema sobre la luna",
|
| 507 |
+
"explícame qué es la democracia",
|
| 508 |
+
"dame ideas para una cena romántica",
|
| 509 |
+
"explique-moi la révolution française",
|
| 510 |
+
"donne-moi des idées de dîner",
|
| 511 |
+
"qui a inventé l'imprimerie",
|
| 512 |
+
"erklär mir, wie ein Regenbogen entsteht",
|
| 513 |
+
"schreib ein kurzes Gedicht über den Herbst",
|
| 514 |
+
"wer hat die Glühbirne erfunden",
|
| 515 |
+
"gib mir Tipps zum Abnehmen",
|
| 516 |
+
"como funciona uma usina nuclear",
|
| 517 |
+
"me explica a diferença entre ansiedade e medo",
|
| 518 |
+
"escreve um texto sobre amizade",
|
| 519 |
+
"me ajuda a organizar meu dia",
|
| 520 |
+
"qual a origem do carnaval",
|
| 521 |
+
"me dá uma receita de bolo de chocolate",
|
| 522 |
+
"cómo funciona un avión",
|
| 523 |
+
"escribe una carta de agradecimiento",
|
| 524 |
+
"dame consejos para aprender inglés",
|
| 525 |
+
"cuál es la montaña más alta del mundo",
|
| 526 |
+
"comment fonctionne un volcan",
|
| 527 |
+
"écris une lettre de motivation",
|
| 528 |
+
"donne-moi des conseils pour mieux dormir",
|
| 529 |
+
"quelle est la plus grande ville du monde",
|
| 530 |
+
"wie funktioniert ein Flugzeug",
|
| 531 |
+
"schreib einen Brief an meinen Chef",
|
| 532 |
+
"gib mir Ideen für ein Geburtstagsgeschenk",
|
| 533 |
+
"was ist der Sinn des Lebens",
|
| 534 |
+
"fasse die Geschichte Roms kurz zusammen",
|
| 535 |
+
"hilf mir, meine Woche zu planen",
|
| 536 |
+
"übersetze bitte: guten Morgen alle zusammen",
|
| 537 |
+
"traduce al francés: buenas noches",
|
| 538 |
+
"what is the difference between weather and climate",
|
| 539 |
+
"tell me a fun fact",
|
| 540 |
+
],
|
| 541 |
+
}
|
| 542 |
+
|
| 543 |
+
# 2.9.1: mais frases por idioma (tars_exemplos_mais.py). Somadas aqui pra
|
| 544 |
+
# valer pra Murph.
|
| 545 |
+
from tars_exemplos_mais import MAIS as _MAIS # noqa: E402
|
| 546 |
+
|
| 547 |
+
for _categoria, _lista in _MAIS.items():
|
| 548 |
+
_vistas = {x.lower() for x in EXEMPLOS[_categoria]}
|
| 549 |
+
EXEMPLOS[_categoria] = EXEMPLOS[_categoria] + [x for x in _lista if x.lower() not in _vistas]
|
| 550 |
+
del _categoria, _lista, _vistas
|
app/murph/tars_exemplos_mais.py
ADDED
|
@@ -0,0 +1,696 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Mais frases de exemplo (2.9.1), somadas às de tars_exemplos.py.
|
| 2 |
+
|
| 3 |
+
A 2.9 tinha ~14 frases por tarefa em cada idioma: pouco pra um
|
| 4 |
+
classificador aprender o que separa as tarefas parecidas em 5 idiomas.
|
| 5 |
+
Aqui ficam frases novas, organizadas por idioma, cobrindo o que mais
|
| 6 |
+
confundia:
|
| 7 |
+
|
| 8 |
+
visao x acao algo achado OLHANDO ("aquele ícone laranja", "o que
|
| 9 |
+
aparece", "qual janela está na frente") x algo que tem
|
| 10 |
+
nome e se faz direto ("liga o wifi", "abaixa o volume")
|
| 11 |
+
busca x geral muda com o tempo ou vem da internet (preço, placar,
|
| 12 |
+
notícia, clima, lançamento, vídeo, "quem ganhou") x a IA
|
| 13 |
+
responde sozinha (explicar, escrever, traduzir, conta,
|
| 14 |
+
curiosidade que não muda)
|
| 15 |
+
simples cumprimento, agradecimento, "tudo bem?", abrir/entrar
|
| 16 |
+
num site conhecido
|
| 17 |
+
codigo x tecnico escrever/consertar PROGRAMA x consertar/entender o LINUX
|
| 18 |
+
|
| 19 |
+
IMPORTANTE: não repetir, nem TRADUZIR, as frases de avaliação
|
| 20 |
+
(idiomas/*.json, "avaliacao" — as 35 são as mesmas nos 5 idiomas) nem as
|
| 21 |
+
de tests/frases_classificador.py. Uma frase de treino que é a tradução de
|
| 22 |
+
uma frase de teste deixa a nota inflada e esconde erro de verdade.
|
| 23 |
+
test_classificador_local.py confere as repetidas e as quase iguais."""
|
| 24 |
+
|
| 25 |
+
MAIS = {
|
| 26 |
+
"visao": [
|
| 27 |
+
# 18/10: reforço da Murph (erros da avaliação e da validação cruzada)
|
| 28 |
+
"arrasta esse arquivo pra lixeira com o mouse",
|
| 29 |
+
"arrasta a janela da direita pro outro monitor",
|
| 30 |
+
"move esse ícone com o cursor pro canto",
|
| 31 |
+
"drag that file to the trash with the mouse",
|
| 32 |
+
"drag this icon to the dock",
|
| 33 |
+
"use the cursor to move that folder to the desktop",
|
| 34 |
+
"me fala o que tem aberto na minha tela neste momento",
|
| 35 |
+
"arrastra este archivo a la papelera con el ratón",
|
| 36 |
+
"zieh das symbol mit der maus in den ordner",
|
| 37 |
+
# pt
|
| 38 |
+
"o que é esse ícone laranja do lado do wifi",
|
| 39 |
+
"clica naquele botão cinza embaixo do formulário",
|
| 40 |
+
"qual janela está na frente agora",
|
| 41 |
+
"que programa está aberto em tela cheia",
|
| 42 |
+
"aperta os três pontinhos no canto da janela",
|
| 43 |
+
"tem alguma janela pedindo senha aí?",
|
| 44 |
+
"o que mostra o gráfico que está aberto",
|
| 45 |
+
"clica no segundo resultado da lista",
|
| 46 |
+
"passa o cursor em cima do ícone da bateria",
|
| 47 |
+
"o que está escrito no botão maior",
|
| 48 |
+
"qual vídeo está passando no navegador",
|
| 49 |
+
"a barra de progresso já chegou no fim?",
|
| 50 |
+
"clica na setinha do lado do nome do arquivo",
|
| 51 |
+
"o que diz a legenda embaixo da foto",
|
| 52 |
+
"seleciona a terceira linha da tabela com o mouse",
|
| 53 |
+
# en
|
| 54 |
+
"what's that orange icon next to the wifi symbol",
|
| 55 |
+
"press the small arrow at the top of the window",
|
| 56 |
+
"which window is focused at the moment",
|
| 57 |
+
"click the third item in that list",
|
| 58 |
+
"describe the picture that's open",
|
| 59 |
+
"is the progress bar finished yet",
|
| 60 |
+
"tap the round thing in the upper left",
|
| 61 |
+
"what color is the icon on the taskbar",
|
| 62 |
+
"which page of the website am I looking at",
|
| 63 |
+
"drag that icon onto the dock",
|
| 64 |
+
"what does the sign in the image say",
|
| 65 |
+
"is there a cancel button somewhere in there",
|
| 66 |
+
"what's the title of the song shown in the player",
|
| 67 |
+
"select the second row of the table with the mouse",
|
| 68 |
+
"what does the caption under the photo say",
|
| 69 |
+
# es
|
| 70 |
+
"qué es ese icono naranja al lado del wifi",
|
| 71 |
+
"haz clic en el botón gris de abajo",
|
| 72 |
+
"qué ventana está delante ahora mismo",
|
| 73 |
+
"qué programa está a pantalla completa",
|
| 74 |
+
"pulsa los tres puntitos de la esquina",
|
| 75 |
+
"qué pone en el cartel de la imagen",
|
| 76 |
+
"la barra de progreso ya terminó?",
|
| 77 |
+
"haz clic en el segundo resultado de la lista",
|
| 78 |
+
"qué canción aparece en el reproductor",
|
| 79 |
+
"selecciona la tercera fila de la tabla con el ratón",
|
| 80 |
+
# fr
|
| 81 |
+
"c'est quoi cette icône orange à côté du wifi",
|
| 82 |
+
"clique sur le bouton gris en bas",
|
| 83 |
+
"quelle fenêtre est devant en ce moment",
|
| 84 |
+
"quelle application est en plein écran",
|
| 85 |
+
"appuie sur les trois petits points dans le coin",
|
| 86 |
+
"qu'est-ce qui est écrit sur la pancarte dans l'image",
|
| 87 |
+
"la barre de progression est terminée ?",
|
| 88 |
+
"clique sur le deuxième résultat de la liste",
|
| 89 |
+
"quelle chanson est affichée dans le lecteur",
|
| 90 |
+
"sélectionne la troisième ligne du tableau avec la souris",
|
| 91 |
+
# de
|
| 92 |
+
"was ist das orange Symbol neben dem WLAN",
|
| 93 |
+
"klick auf den grauen Knopf unten",
|
| 94 |
+
"welches Fenster ist gerade vorne",
|
| 95 |
+
"welches Programm läuft im Vollbild",
|
| 96 |
+
"drück auf die drei Punkte in der Ecke",
|
| 97 |
+
"was steht auf dem Schild im Bild",
|
| 98 |
+
"ist der Fortschrittsbalken schon fertig",
|
| 99 |
+
"klick auf das zweite Ergebnis in der Liste",
|
| 100 |
+
"welches Lied wird im Player angezeigt",
|
| 101 |
+
"markier die dritte Zeile der Tabelle mit der Maus",
|
| 102 |
+
# com o mouse/cursor ou achado pela posição/aparência
|
| 103 |
+
"passa o mouse por cima do menu de cima pra ver as opções",
|
| 104 |
+
"move the cursor to the scroll bar and scroll down",
|
| 105 |
+
"mueve el cursor hasta la barra de arriba",
|
| 106 |
+
"déplace le curseur sur la barre en haut",
|
| 107 |
+
"beweg den Mauszeiger auf die Leiste oben",
|
| 108 |
+
"qual aplicativo está minimizado na barra",
|
| 109 |
+
"which of the open apps is playing sound, look at the panel",
|
| 110 |
+
"qué aplicación está minimizada en la barra",
|
| 111 |
+
"quelle application est réduite dans la barre",
|
| 112 |
+
"welche App ist in der Leiste minimiert",
|
| 113 |
+
],
|
| 114 |
+
"codigo": [
|
| 115 |
+
# pt
|
| 116 |
+
"faz um script em bash que faz backup da minha pasta pessoal",
|
| 117 |
+
"meu programa em c++ dá erro de compilação no include",
|
| 118 |
+
"como faço um while em javascript",
|
| 119 |
+
"escreve uma consulta sql que soma as vendas por mês",
|
| 120 |
+
"o que é um ponteiro em c",
|
| 121 |
+
"minha função em python retorna none e não sei por quê",
|
| 122 |
+
"cria uma api simples em flask",
|
| 123 |
+
"como leio um arquivo json em python",
|
| 124 |
+
"explica o que é programação orientada a objetos",
|
| 125 |
+
"esse regex não pega os e-mails direito, corrige",
|
| 126 |
+
"faz uma função que calcula fibonacci",
|
| 127 |
+
"como uso async await em typescript",
|
| 128 |
+
"o que significa esse keyerror no meu código",
|
| 129 |
+
"escreve um teste unitário pra essa função",
|
| 130 |
+
"converte esse código de python pra javascript",
|
| 131 |
+
# en
|
| 132 |
+
"write a bash script that backs up my home folder",
|
| 133 |
+
"my python function returns the wrong value",
|
| 134 |
+
"what is a closure in javascript",
|
| 135 |
+
"how do I sort a dictionary by value in python",
|
| 136 |
+
"fix the off by one error in my code",
|
| 137 |
+
"write a function that checks if a number is prime",
|
| 138 |
+
"my go program deadlocks when I use channels",
|
| 139 |
+
"explain the difference between a list and a tuple in python",
|
| 140 |
+
"how do I make a POST request with fetch",
|
| 141 |
+
"write a regex that matches phone numbers",
|
| 142 |
+
"create a class for a bank account in c#",
|
| 143 |
+
"why does my java code throw a ClassCastException",
|
| 144 |
+
"turn this into a list comprehension",
|
| 145 |
+
"how do I load a csv with pandas",
|
| 146 |
+
"what does the static keyword mean in c++",
|
| 147 |
+
# es
|
| 148 |
+
"escribe una función en python que ordene un diccionario",
|
| 149 |
+
"mi programa en java da un error de compilación",
|
| 150 |
+
"qué es una variable global en programación",
|
| 151 |
+
"crea un script que descargue imágenes de una página",
|
| 152 |
+
"cómo conecto python con una base de datos mysql",
|
| 153 |
+
"arregla el error de sintaxis de mi código",
|
| 154 |
+
"escribe una consulta sql para borrar duplicados",
|
| 155 |
+
"qué hace return en una función",
|
| 156 |
+
"cómo hago una petición post con fetch",
|
| 157 |
+
"escribe un test unitario para esta función",
|
| 158 |
+
# fr
|
| 159 |
+
"écris une fonction python qui trie un dictionnaire",
|
| 160 |
+
"mon programme java ne compile pas",
|
| 161 |
+
"qu'est-ce qu'une classe en programmation",
|
| 162 |
+
"écris un script qui télécharge les images d'une page",
|
| 163 |
+
"corrige l'erreur dans ma requête sql",
|
| 164 |
+
"comment lire un fichier texte en python",
|
| 165 |
+
"explique-moi les pointeurs en c",
|
| 166 |
+
"écris un programme qui compte les mots d'un texte",
|
| 167 |
+
"que fait le mot-clé return dans une fonction",
|
| 168 |
+
"écris un test unitaire pour cette fonction",
|
| 169 |
+
# de
|
| 170 |
+
"schreib eine Funktion in Python, die ein Dictionary sortiert",
|
| 171 |
+
"mein Java-Programm kompiliert nicht",
|
| 172 |
+
"was ist eine Klasse in der Programmierung",
|
| 173 |
+
"schreib ein Skript, das Bilder von einer Webseite herunterlädt",
|
| 174 |
+
"korrigiere den Fehler in meiner SQL-Abfrage",
|
| 175 |
+
"wie lese ich eine Textdatei in Python",
|
| 176 |
+
"erklär mir Zeiger in C",
|
| 177 |
+
"schreib ein Programm, das die Wörter in einem Text zählt",
|
| 178 |
+
"was macht return in einer Funktion",
|
| 179 |
+
"schreib einen Unit-Test für diese Funktion",
|
| 180 |
+
],
|
| 181 |
+
"tecnico": [
|
| 182 |
+
# 18/10: reforço da Murph (erros da avaliação e da validação cruzada)
|
| 183 |
+
"qual a diferença entre apt e snap",
|
| 184 |
+
"diferença entre xorg e wayland, qual devo usar",
|
| 185 |
+
"qual a diferença entre systemd e init",
|
| 186 |
+
"o que é melhor pra mim, flatpak ou appimage",
|
| 187 |
+
"diferença entre swap em arquivo e partição de swap",
|
| 188 |
+
"gnome ou kde, qual gasta menos memória",
|
| 189 |
+
"o que muda entre o kernel lts e o mais novo",
|
| 190 |
+
"zsh ou bash, qual a diferença",
|
| 191 |
+
"diferença entre sudo e su no linux",
|
| 192 |
+
"qual a diferença entre ext4 e xfs pra um ssd",
|
| 193 |
+
"what's the difference between apt and apt-get",
|
| 194 |
+
"wayland vs x11, which one should i use",
|
| 195 |
+
"difference between a deb and a snap package",
|
| 196 |
+
"should i use btrfs or zfs on my home server",
|
| 197 |
+
"what is the difference between grub and systemd-boot",
|
| 198 |
+
"difference between pipewire and pulseaudio",
|
| 199 |
+
"is xfs better than ext4 for big files",
|
| 200 |
+
"lts kernel or the latest one, what changes",
|
| 201 |
+
"diferencia entre apt y snap en ubuntu",
|
| 202 |
+
"différence entre wayland et xorg",
|
| 203 |
+
"unterschied zwischen apt und snap",
|
| 204 |
+
"como funciona o sistema de arquivos btrfs",
|
| 205 |
+
"what does the swappiness setting do",
|
| 206 |
+
"pra que serve o arquivo fstab",
|
| 207 |
+
# pt
|
| 208 |
+
"o wifi não conecta depois que atualizei o sistema",
|
| 209 |
+
"como instalo o driver da nvidia no ubuntu",
|
| 210 |
+
"o som parou de funcionar no linux",
|
| 211 |
+
"como vejo quanto espaço tem no disco pelo terminal",
|
| 212 |
+
"o grub sumiu depois que instalei o windows",
|
| 213 |
+
"o que é um serviço do systemd",
|
| 214 |
+
"como dou permissão de execução num arquivo .sh",
|
| 215 |
+
"a tela fica preta depois do login no zorin",
|
| 216 |
+
"como adiciono um repositório ppa",
|
| 217 |
+
"o que é um processo zumbi",
|
| 218 |
+
"como faço o hd montar sozinho quando o pc liga",
|
| 219 |
+
"o flatpak não abre o aplicativo que instalei",
|
| 220 |
+
"como troco o shell padrão pra zsh",
|
| 221 |
+
"o touchpad parou de funcionar no notebook",
|
| 222 |
+
"o que o comando chmod 755 faz",
|
| 223 |
+
# en
|
| 224 |
+
"my wifi keeps disconnecting on linux mint",
|
| 225 |
+
"how do I install the nvidia drivers on fedora",
|
| 226 |
+
"sound stopped working after the last update",
|
| 227 |
+
"how do I check disk usage from the terminal",
|
| 228 |
+
"grub disappeared after I installed windows",
|
| 229 |
+
"what is a systemd service and how do I make one",
|
| 230 |
+
"how do I give a script execute permission",
|
| 231 |
+
"my laptop won't wake up from suspend on ubuntu",
|
| 232 |
+
"how do I add a ppa repository",
|
| 233 |
+
"what does chmod 755 mean",
|
| 234 |
+
"how do I mount a usb drive automatically at boot",
|
| 235 |
+
"the flatpak app won't launch",
|
| 236 |
+
"how do I change my default shell to zsh",
|
| 237 |
+
"why is my cpu at 100 percent all the time",
|
| 238 |
+
"how do I see which process is using a port",
|
| 239 |
+
# es
|
| 240 |
+
"el wifi no conecta después de actualizar ubuntu",
|
| 241 |
+
"cómo instalo los drivers de nvidia en linux",
|
| 242 |
+
"el sonido dejó de funcionar en linux",
|
| 243 |
+
"cómo veo el espacio libre del disco en la terminal",
|
| 244 |
+
"el grub desapareció al instalar windows",
|
| 245 |
+
"cómo le doy permisos de ejecución a un script",
|
| 246 |
+
"mi portátil no despierta de la suspensión",
|
| 247 |
+
"cómo agrego un repositorio ppa",
|
| 248 |
+
"qué es un servicio de systemd",
|
| 249 |
+
"el touchpad no funciona en linux",
|
| 250 |
+
# fr
|
| 251 |
+
"le wifi ne se connecte plus depuis la mise à jour",
|
| 252 |
+
"comment installer les pilotes nvidia sur ubuntu",
|
| 253 |
+
"le son ne marche plus sous linux",
|
| 254 |
+
"comment voir l'espace disque dans le terminal",
|
| 255 |
+
"grub a disparu après l'installation de windows",
|
| 256 |
+
"comment rendre un script exécutable",
|
| 257 |
+
"mon portable ne sort plus de la veille",
|
| 258 |
+
"comment ajouter un dépôt ppa",
|
| 259 |
+
"c'est quoi un service systemd",
|
| 260 |
+
"le pavé tactile ne fonctionne plus sous linux",
|
| 261 |
+
# de
|
| 262 |
+
"das WLAN verbindet sich nach dem Update nicht mehr",
|
| 263 |
+
"wie installiere ich die Nvidia-Treiber unter Fedora",
|
| 264 |
+
"der Ton funktioniert unter Linux nicht mehr",
|
| 265 |
+
"wie sehe ich den belegten Speicher im Terminal",
|
| 266 |
+
"GRUB ist nach der Windows-Installation verschwunden",
|
| 267 |
+
"wie mache ich ein Skript ausführbar",
|
| 268 |
+
"mein Laptop wacht nicht mehr aus dem Standby auf",
|
| 269 |
+
"wie füge ich ein PPA hinzu",
|
| 270 |
+
"was ist ein systemd-Dienst",
|
| 271 |
+
"das Touchpad funktioniert unter Linux nicht mehr",
|
| 272 |
+
],
|
| 273 |
+
"acao": [
|
| 274 |
+
# 18/10: reforço da Murph (erros da avaliação e da validação cruzada)
|
| 275 |
+
"abre o spotify e toca alguma coisa",
|
| 276 |
+
"abre o discord",
|
| 277 |
+
"abre o steam",
|
| 278 |
+
"launch spotify",
|
| 279 |
+
"open discord",
|
| 280 |
+
"toca a próxima música",
|
| 281 |
+
"skip this song",
|
| 282 |
+
"aumenta o volume pra 70",
|
| 283 |
+
"set the volume to 30 percent",
|
| 284 |
+
"bloqueia a tela",
|
| 285 |
+
"lock the screen",
|
| 286 |
+
"desliga o computador daqui a uma hora",
|
| 287 |
+
"reinicia o computador",
|
| 288 |
+
"cria uma pasta Faturas dentro de Documentos",
|
| 289 |
+
"copia o arquivo relatorio.pdf pra área de trabalho",
|
| 290 |
+
"empty the trash",
|
| 291 |
+
"abre a pasta downloads",
|
| 292 |
+
"open my documents folder",
|
| 293 |
+
"tira um print da tela inteira",
|
| 294 |
+
# pt
|
| 295 |
+
"liga o wifi",
|
| 296 |
+
"abaixa um pouquinho o som",
|
| 297 |
+
"ativa a luz noturna",
|
| 298 |
+
"copia os pdfs dos downloads pros documentos",
|
| 299 |
+
"muda o nome de foto1.jpg pra praia.jpg",
|
| 300 |
+
"fecha o firefox e abre o gerenciador de arquivos",
|
| 301 |
+
"coloca o brilho em 50 por cento",
|
| 302 |
+
"silencia o computador",
|
| 303 |
+
"cria uma pasta chamada projetos nos documentos",
|
| 304 |
+
"esvazia a pasta downloads",
|
| 305 |
+
"maximiza a janela do navegador",
|
| 306 |
+
"manda um oi pro joão no telegram",
|
| 307 |
+
"ativa o modo não perturbe",
|
| 308 |
+
"abre o terminal",
|
| 309 |
+
"trava a tela",
|
| 310 |
+
"tira o som do computador",
|
| 311 |
+
"desativa o bluetooth e liga o wifi",
|
| 312 |
+
# en
|
| 313 |
+
"turn the wifi on",
|
| 314 |
+
"lower the sound a bit",
|
| 315 |
+
"turn on night light",
|
| 316 |
+
"copy the pdfs from downloads to documents",
|
| 317 |
+
"change the name of photo1.jpg to beach.jpg",
|
| 318 |
+
"quit firefox and open the file manager",
|
| 319 |
+
"set the brightness to half",
|
| 320 |
+
"silence the computer",
|
| 321 |
+
"make a new folder called invoices on the desktop",
|
| 322 |
+
"empty the downloads folder",
|
| 323 |
+
"maximize the browser window",
|
| 324 |
+
"send hello to maria on telegram",
|
| 325 |
+
"enable do not disturb",
|
| 326 |
+
"open the calculator and add 15 and 27",
|
| 327 |
+
"lock the screen",
|
| 328 |
+
"disable bluetooth and connect to wifi",
|
| 329 |
+
"switch to the light theme",
|
| 330 |
+
# es
|
| 331 |
+
"enciende el wifi",
|
| 332 |
+
"baja un poquito el sonido",
|
| 333 |
+
"activa la luz nocturna",
|
| 334 |
+
"copia los pdf de descargas a documentos",
|
| 335 |
+
"cambia el nombre de foto1.jpg a playa.jpg",
|
| 336 |
+
"cierra firefox y abre el explorador de archivos",
|
| 337 |
+
"pon el brillo al cincuenta por ciento",
|
| 338 |
+
"crea una carpeta llamada trabajo en documentos",
|
| 339 |
+
"maximiza la ventana del navegador",
|
| 340 |
+
"bloquea la pantalla",
|
| 341 |
+
"vacía la carpeta de descargas",
|
| 342 |
+
"activa el modo no molestar",
|
| 343 |
+
# fr
|
| 344 |
+
"allume le wifi",
|
| 345 |
+
"baisse un peu le son",
|
| 346 |
+
"active l'éclairage nocturne",
|
| 347 |
+
"copie les pdf des téléchargements vers documents",
|
| 348 |
+
"change le nom de photo1.jpg en plage.jpg",
|
| 349 |
+
"ferme firefox et ouvre le gestionnaire de fichiers",
|
| 350 |
+
"mets la luminosité à cinquante pour cent",
|
| 351 |
+
"crée un dossier travail dans documents",
|
| 352 |
+
"agrandis la fenêtre du navigateur",
|
| 353 |
+
"verrouille l'écran",
|
| 354 |
+
"vide le dossier téléchargements",
|
| 355 |
+
"active le mode ne pas déranger",
|
| 356 |
+
# de
|
| 357 |
+
"schalte die Tastaturbeleuchtung ein",
|
| 358 |
+
"mach den Ton ein bisschen leiser",
|
| 359 |
+
"aktiviere das Nachtlicht",
|
| 360 |
+
"kopier die PDFs aus Downloads nach Dokumente",
|
| 361 |
+
"nenn foto1.jpg in strand.jpg um",
|
| 362 |
+
"schließ Firefox und öffne den Dateimanager",
|
| 363 |
+
"stell die Helligkeit auf fünfzig Prozent",
|
| 364 |
+
"erstell einen Ordner Arbeit in Dokumente",
|
| 365 |
+
"maximier das Browserfenster",
|
| 366 |
+
"sperr den Bildschirm",
|
| 367 |
+
"leer den Downloads-Ordner",
|
| 368 |
+
"aktiviere Bitte nicht stören",
|
| 369 |
+
],
|
| 370 |
+
"busca": [
|
| 371 |
+
# pt
|
| 372 |
+
"quanto tá o dólar hoje",
|
| 373 |
+
"qual o preço de um steam deck agora",
|
| 374 |
+
"quem ganhou a fórmula 1 no domingo",
|
| 375 |
+
"notícias de hoje sobre economia",
|
| 376 |
+
"quando lança o próximo filme do batman",
|
| 377 |
+
"procura um tutorial de como formatar o pc",
|
| 378 |
+
"quero ver vídeos de gatos engraçados",
|
| 379 |
+
"como vai estar o tempo amanhã em curitiba",
|
| 380 |
+
"que horas começa o jogo do flamengo hoje",
|
| 381 |
+
"procura reviews do galaxy s25",
|
| 382 |
+
"qual o resultado da mega sena de ontem",
|
| 383 |
+
"pesquisa hotéis baratos em florianópolis",
|
| 384 |
+
"qual a tabela do brasileirão agora",
|
| 385 |
+
"quais filmes estão em cartaz no cinema",
|
| 386 |
+
"quanto custa uma passagem pra são paulo amanhã",
|
| 387 |
+
# en
|
| 388 |
+
"what's bitcoin trading at right now",
|
| 389 |
+
"how much is a steam deck these days",
|
| 390 |
+
"who won the nba game last night",
|
| 391 |
+
"latest news about the elections",
|
| 392 |
+
"when does the new zelda game release",
|
| 393 |
+
"look up a guide on building a gaming pc",
|
| 394 |
+
"show me videos of cats doing funny things",
|
| 395 |
+
"what's the weather forecast for tomorrow in london",
|
| 396 |
+
"what time does the grand prix start today",
|
| 397 |
+
"find reviews of the new macbook air",
|
| 398 |
+
"what are the lottery numbers from yesterday",
|
| 399 |
+
"search for cheap flights to tokyo",
|
| 400 |
+
"current standings of the premier league",
|
| 401 |
+
"find a youtube tutorial on fixing a leaky faucet",
|
| 402 |
+
"what movies are playing in theaters this week",
|
| 403 |
+
# es
|
| 404 |
+
"a cuánto está el euro hoy",
|
| 405 |
+
"cuánto cuesta una steam deck ahora",
|
| 406 |
+
"quién ganó la fórmula 1 el domingo",
|
| 407 |
+
"noticias de hoy sobre economía",
|
| 408 |
+
"cuándo sale el nuevo juego de zelda",
|
| 409 |
+
"busca un tutorial para formatear el pc",
|
| 410 |
+
"qué tiempo hará mañana en madrid",
|
| 411 |
+
"busca opiniones del nuevo macbook air",
|
| 412 |
+
"busca vuelos baratos a cancún",
|
| 413 |
+
"qué películas hay en el cine esta semana",
|
| 414 |
+
# fr
|
| 415 |
+
"combien vaut le dollar aujourd'hui",
|
| 416 |
+
"quel est le prix d'un steam deck en ce moment",
|
| 417 |
+
"qui a gagné le grand prix de formule 1 dimanche",
|
| 418 |
+
"les actualités économiques du jour",
|
| 419 |
+
"quand sort le nouveau jeu zelda",
|
| 420 |
+
"cherche un tutoriel pour formater un pc",
|
| 421 |
+
"quelle météo demain à paris",
|
| 422 |
+
"trouve des avis sur le nouveau macbook air",
|
| 423 |
+
"cherche des billets d'avion pas chers pour rome",
|
| 424 |
+
"quels films sont au cinéma cette semaine",
|
| 425 |
+
# de
|
| 426 |
+
"wie steht der Dollar heute",
|
| 427 |
+
"was kostet ein Steam Deck gerade",
|
| 428 |
+
"wer hat am Sonntag die Formel 1 gewonnen",
|
| 429 |
+
"aktuelle Wirtschaftsnachrichten",
|
| 430 |
+
"wann erscheint das neue Zelda-Spiel",
|
| 431 |
+
"such eine Anleitung zum Formatieren eines PCs",
|
| 432 |
+
"wie wird das Wetter morgen in Berlin",
|
| 433 |
+
"such Testberichte zum neuen MacBook Air",
|
| 434 |
+
"such günstige Flüge nach Mallorca",
|
| 435 |
+
"welche Filme laufen diese Woche im Kino",
|
| 436 |
+
],
|
| 437 |
+
"simples": [
|
| 438 |
+
# 18/10: reforço da Murph (erros da avaliação e da validação cruzada)
|
| 439 |
+
"e aí, tudo certo com você hoje?",
|
| 440 |
+
"oi tars, como vai você?",
|
| 441 |
+
"olá, como você está se sentindo hoje?",
|
| 442 |
+
"bom dia! como você tá?",
|
| 443 |
+
"good morning tars, everything fine with you?",
|
| 444 |
+
"hi tars, how's it going?",
|
| 445 |
+
"hello, how are you today?",
|
| 446 |
+
"yo, what's going on?",
|
| 447 |
+
"hola, ¿qué tal estás?",
|
| 448 |
+
"hallo, wie geht's dir heute?",
|
| 449 |
+
"go to youtube for me",
|
| 450 |
+
"take me to reddit",
|
| 451 |
+
"open facebook for me",
|
| 452 |
+
"vai no instagram pra mim",
|
| 453 |
+
"abre o gmail pra mim",
|
| 454 |
+
"entra no whatsapp web",
|
| 455 |
+
"abre o netflix",
|
| 456 |
+
"abre o google drive",
|
| 457 |
+
"open twitter for me",
|
| 458 |
+
"go to github please",
|
| 459 |
+
# pt
|
| 460 |
+
"oi tudo bem?",
|
| 461 |
+
# 17/10: respostas curtas no meio de uma conversa
|
| 462 |
+
"ok, got it",
|
| 463 |
+
"fair enough",
|
| 464 |
+
"alright, thanks",
|
| 465 |
+
"yeah, you're right",
|
| 466 |
+
"nope",
|
| 467 |
+
"sure, why not",
|
| 468 |
+
"beleza, entendi",
|
| 469 |
+
"tá certo",
|
| 470 |
+
"não, obrigado",
|
| 471 |
+
"pode ser",
|
| 472 |
+
"verdade",
|
| 473 |
+
"ah, entendi agora",
|
| 474 |
+
"obrigadão",
|
| 475 |
+
"boa tarde!",
|
| 476 |
+
"valeu, era isso",
|
| 477 |
+
"tchau, até mais",
|
| 478 |
+
"abre o youtube pra mim",
|
| 479 |
+
"vai no instagram",
|
| 480 |
+
"abre o site do banco do brasil",
|
| 481 |
+
"beleza, obrigado",
|
| 482 |
+
"olá tars",
|
| 483 |
+
"vlw",
|
| 484 |
+
"como vai você?",
|
| 485 |
+
# en
|
| 486 |
+
"hey there",
|
| 487 |
+
"how's it going?",
|
| 488 |
+
"thanks, that's all",
|
| 489 |
+
"good night!",
|
| 490 |
+
"hello again",
|
| 491 |
+
"bye, see you later",
|
| 492 |
+
"go to youtube",
|
| 493 |
+
"open twitter",
|
| 494 |
+
"pull up netflix for me",
|
| 495 |
+
"cheers",
|
| 496 |
+
"much appreciated",
|
| 497 |
+
"you're awesome, thanks",
|
| 498 |
+
# es
|
| 499 |
+
"hola, qué tal",
|
| 500 |
+
"gracias, eso es todo",
|
| 501 |
+
"adiós, hasta luego",
|
| 502 |
+
"abre youtube",
|
| 503 |
+
"ve a facebook",
|
| 504 |
+
"qué tal va todo?",
|
| 505 |
+
# fr
|
| 506 |
+
"salut, ça va ?",
|
| 507 |
+
"merci, c'est tout",
|
| 508 |
+
"au revoir, à plus",
|
| 509 |
+
"ouvre youtube",
|
| 510 |
+
"va sur facebook",
|
| 511 |
+
"coucou tars",
|
| 512 |
+
# de
|
| 513 |
+
"hallo, wie läuft's?",
|
| 514 |
+
"danke, das war's",
|
| 515 |
+
"tschüss, bis später",
|
| 516 |
+
"öffne YouTube",
|
| 517 |
+
"geh auf Facebook",
|
| 518 |
+
"na, alles klar?",
|
| 519 |
+
],
|
| 520 |
+
"geral": [
|
| 521 |
+
# 18/10: reforço da Murph (erros da avaliação e da validação cruzada)
|
| 522 |
+
"quanto é 20% de 350",
|
| 523 |
+
"quanto dá 7 vezes 13",
|
| 524 |
+
"calcula 18% de 1200",
|
| 525 |
+
"quanto é a metade de 845",
|
| 526 |
+
"what's 25% of 640",
|
| 527 |
+
"how much is 12 times 15",
|
| 528 |
+
"what is 30 percent of 90",
|
| 529 |
+
"cuánto es el 10% de 500",
|
| 530 |
+
"quem descobriu a penicilina",
|
| 531 |
+
"quem pintou a mona lisa",
|
| 532 |
+
"quem foi o primeiro presidente do brasil",
|
| 533 |
+
"em que ano acabou a segunda guerra mundial",
|
| 534 |
+
"quem escreveu os lusíadas",
|
| 535 |
+
"who discovered gravity",
|
| 536 |
+
"who invented the light bulb",
|
| 537 |
+
"who was the first person on the moon",
|
| 538 |
+
"when did the roman empire fall",
|
| 539 |
+
"quién descubrió américa",
|
| 540 |
+
"qui a découvert la pénicilline",
|
| 541 |
+
"wer hat das telefon erfunden",
|
| 542 |
+
"me explica como funciona a internet",
|
| 543 |
+
"o que é inteligência artificial, de forma simples",
|
| 544 |
+
"how does a credit card work",
|
| 545 |
+
"explain how vaccines work",
|
| 546 |
+
"o que é uma criptomoeda",
|
| 547 |
+
"como funciona um motor elétrico",
|
| 548 |
+
"what is machine learning in simple words",
|
| 549 |
+
"por que os aviões voam",
|
| 550 |
+
"what causes earthquakes",
|
| 551 |
+
"como funciona a bolsa de valores",
|
| 552 |
+
# pt
|
| 553 |
+
"me explica como funciona a fotossíntese",
|
| 554 |
+
"escreve um haicai sobre o outono",
|
| 555 |
+
"me dá ideias pra uma festa de aniversário",
|
| 556 |
+
"resume a revolução francesa",
|
| 557 |
+
"qual a diferença entre jacaré e crocodilo",
|
| 558 |
+
"me ajuda a montar um cardápio saudável pra semana",
|
| 559 |
+
"traduz pro francês: onde fica a estação de trem",
|
| 560 |
+
"por que a gente sonha",
|
| 561 |
+
"me conta uma curiosidade sobre polvos",
|
| 562 |
+
"quanto é 12 vezes 8",
|
| 563 |
+
"escreve um e-mail pedindo férias pro meu chefe",
|
| 564 |
+
"quem foi santos dumont",
|
| 565 |
+
"me dá dicas pra estudar melhor",
|
| 566 |
+
"como se faz um bolo de fubá",
|
| 567 |
+
"o que significa a palavra efêmero",
|
| 568 |
+
"qual a capital da austrália",
|
| 569 |
+
# en
|
| 570 |
+
"explain how photosynthesis works",
|
| 571 |
+
"write a haiku about autumn",
|
| 572 |
+
"give me ideas for a birthday party",
|
| 573 |
+
"summarize the french revolution briefly",
|
| 574 |
+
"what's the difference between a crocodile and an alligator",
|
| 575 |
+
"help me plan a week of healthy meals",
|
| 576 |
+
"translate to french: where is the train station",
|
| 577 |
+
"why do we dream",
|
| 578 |
+
"tell me something interesting about octopuses",
|
| 579 |
+
"what is 25 percent of 360",
|
| 580 |
+
"write a cover letter for a barista job",
|
| 581 |
+
"who was nikola tesla",
|
| 582 |
+
"give me tips to study better",
|
| 583 |
+
"how do you make pancakes",
|
| 584 |
+
"what does serendipity mean",
|
| 585 |
+
"what's the capital of canada",
|
| 586 |
+
# es
|
| 587 |
+
"explícame cómo funciona la fotosíntesis",
|
| 588 |
+
"escribe un haiku sobre el otoño",
|
| 589 |
+
"dame ideas para una fiesta de cumpleaños",
|
| 590 |
+
"resume la revolución francesa",
|
| 591 |
+
"quién fue nikola tesla",
|
| 592 |
+
"ayúdame a armar un menú saludable para la semana",
|
| 593 |
+
"traduce al francés: dónde está la estación de tren",
|
| 594 |
+
"por qué soñamos",
|
| 595 |
+
"cuánto es 17 por 6",
|
| 596 |
+
"qué significa la palabra efímero",
|
| 597 |
+
# fr
|
| 598 |
+
"explique-moi comment fonctionne la photosynthèse",
|
| 599 |
+
"écris un haïku sur l'automne",
|
| 600 |
+
"donne-moi des idées pour une fête d'anniversaire",
|
| 601 |
+
"résume la révolution française",
|
| 602 |
+
"qui était nikola tesla",
|
| 603 |
+
"aide-moi à préparer des menus sains pour la semaine",
|
| 604 |
+
"traduis en anglais : où est la gare",
|
| 605 |
+
"pourquoi est-ce qu'on rêve",
|
| 606 |
+
"combien font 17 fois 6",
|
| 607 |
+
"que veut dire le mot éphémère",
|
| 608 |
+
# de
|
| 609 |
+
"erklär mir, wie Photosynthese funktioniert",
|
| 610 |
+
"schreib ein Haiku über den Herbst",
|
| 611 |
+
"gib mir Ideen für eine Geburtstagsparty",
|
| 612 |
+
"fass die Französische Revolution kurz zusammen",
|
| 613 |
+
"wer war Nikola Tesla",
|
| 614 |
+
"hilf mir, einen gesunden Wochenplan fürs Essen zu machen",
|
| 615 |
+
"übersetze ins Englische: wo ist der Bahnhof",
|
| 616 |
+
"warum träumen wir",
|
| 617 |
+
"wie viel ist 17 mal 6",
|
| 618 |
+
"was bedeutet das Wort vergänglich",
|
| 619 |
+
# conhecimento, conta, receita, escrita (a IA responde sozinha,
|
| 620 |
+
# mesmo começando com "quem", "quanto" ou "qual")
|
| 621 |
+
"quem inventou o telefone",
|
| 622 |
+
"divide 144 por 12",
|
| 623 |
+
"como faço arroz soltinho",
|
| 624 |
+
"escreve uma mensagem de parabéns pra minha mãe",
|
| 625 |
+
"qual o maior planeta do sistema solar",
|
| 626 |
+
"quantos ossos tem o corpo humano",
|
| 627 |
+
"who wrote romeo and juliet",
|
| 628 |
+
"what's the square root of 81",
|
| 629 |
+
"how do I cook rice so it isn't sticky",
|
| 630 |
+
"write a birthday message for my sister",
|
| 631 |
+
"which planet is the biggest",
|
| 632 |
+
"how many legs does a spider have",
|
| 633 |
+
"quién inventó la imprenta",
|
| 634 |
+
"cuál es la raíz cuadrada de 144",
|
| 635 |
+
"cómo se hace una tortilla de patatas",
|
| 636 |
+
"escribe un mensaje de cumpleaños para mi hermana",
|
| 637 |
+
"qui a inventé l'imprimerie",
|
| 638 |
+
"quelle est la racine carrée de 144",
|
| 639 |
+
"comment on fait une pâte à crêpes",
|
| 640 |
+
"écris un message d'anniversaire pour ma sœur",
|
| 641 |
+
"wer hat den Buchdruck erfunden",
|
| 642 |
+
"was ist die Wurzel aus 144",
|
| 643 |
+
"wie koche ich Reis richtig",
|
| 644 |
+
"schreib eine Geburtstagsnachricht für meine Schwester",
|
| 645 |
+
# 17/10: continuação de CONVERSA (sem pedido de fazer nada no PC). Antes caíam em visao/busca/tecnico e o app
|
| 646 |
+
# cobrava uma ferramenta: "but i need to wash the car" fechou o Claude do Enzo. Frases de teste ficam fora daqui.
|
| 647 |
+
"but i still have to clean the kitchen",
|
| 648 |
+
"but the store closes at six",
|
| 649 |
+
"but the dog needs a bath too",
|
| 650 |
+
"no, the house is far from here",
|
| 651 |
+
"no, my phone is already charged",
|
| 652 |
+
"the shirt is still wet",
|
| 653 |
+
"the bus is always late here",
|
| 654 |
+
"it's only two blocks away",
|
| 655 |
+
"it's too cold to go out",
|
| 656 |
+
"my friend thinks i should wait",
|
| 657 |
+
"my boss says the meeting moved to friday",
|
| 658 |
+
"i only have ten dollars",
|
| 659 |
+
"i have to be back by noon",
|
| 660 |
+
"what if it snows tomorrow?",
|
| 661 |
+
"and what about the kids?",
|
| 662 |
+
"so should i go now or later?",
|
| 663 |
+
"is that really a good idea?",
|
| 664 |
+
"why do you say that?",
|
| 665 |
+
"i'm not sure that's right",
|
| 666 |
+
"that sounds wrong to me",
|
| 667 |
+
"wait, i think you misunderstood",
|
| 668 |
+
"i was talking about the first option",
|
| 669 |
+
"so which one is cheaper in the end?",
|
| 670 |
+
"should i take an umbrella?",
|
| 671 |
+
"do you think it's worth it?",
|
| 672 |
+
"mas eu ainda preciso arrumar a cozinha",
|
| 673 |
+
"mas a padaria fecha às seis",
|
| 674 |
+
"não, a casa fica longe daqui",
|
| 675 |
+
"a camisa ainda está molhada",
|
| 676 |
+
"o ônibus aqui sempre atrasa",
|
| 677 |
+
"fica só a duas quadras",
|
| 678 |
+
"está frio demais pra sair",
|
| 679 |
+
"meu amigo acha que eu devia esperar",
|
| 680 |
+
"meu chefe disse que a reunião mudou pra sexta",
|
| 681 |
+
"só tenho dez reais",
|
| 682 |
+
"preciso voltar até o meio-dia",
|
| 683 |
+
"e se nevar?",
|
| 684 |
+
"e as crianças?",
|
| 685 |
+
"então eu vou agora ou depois?",
|
| 686 |
+
"isso é mesmo uma boa ideia?",
|
| 687 |
+
"por que você diz isso?",
|
| 688 |
+
"não tenho certeza se está certo",
|
| 689 |
+
"isso me parece errado",
|
| 690 |
+
"espera, acho que você entendeu errado",
|
| 691 |
+
"eu estava falando da primeira opção",
|
| 692 |
+
"no fim, qual sai mais barato?",
|
| 693 |
+
"levo guarda-chuva?",
|
| 694 |
+
"você acha que vale a pena?",
|
| 695 |
+
],
|
| 696 |
+
}
|
app/murph/teste_cego.json
ADDED
|
@@ -0,0 +1,1402 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
[
|
| 3 |
+
"o que ta escrito nessa janela ai",
|
| 4 |
+
"visao",
|
| 5 |
+
"pt_BR"
|
| 6 |
+
],
|
| 7 |
+
[
|
| 8 |
+
"clica no botao azul la embaixo",
|
| 9 |
+
"visao",
|
| 10 |
+
"pt_BR"
|
| 11 |
+
],
|
| 12 |
+
[
|
| 13 |
+
"le pra mim o erro que apareceu na tela",
|
| 14 |
+
"visao",
|
| 15 |
+
"pt_BR"
|
| 16 |
+
],
|
| 17 |
+
[
|
| 18 |
+
"oi tudo bem? ve ai o que tem aberto na minha tela e me diz",
|
| 19 |
+
"visao",
|
| 20 |
+
"pt_BR"
|
| 21 |
+
],
|
| 22 |
+
[
|
| 23 |
+
"aperta aquele x vermelho no canto",
|
| 24 |
+
"visao",
|
| 25 |
+
"pt_BR"
|
| 26 |
+
],
|
| 27 |
+
[
|
| 28 |
+
"será que dá pra vc arrastar essa imagem pra pasta que ta do lado",
|
| 29 |
+
"visao",
|
| 30 |
+
"pt_BR"
|
| 31 |
+
],
|
| 32 |
+
[
|
| 33 |
+
"descreve oq aparece no meu monitor agora",
|
| 34 |
+
"visao",
|
| 35 |
+
"pt_BR"
|
| 36 |
+
],
|
| 37 |
+
[
|
| 38 |
+
"tem um popup chato no meio da tela clica em fechar nele",
|
| 39 |
+
"visao",
|
| 40 |
+
"pt_BR"
|
| 41 |
+
],
|
| 42 |
+
[
|
| 43 |
+
"faz um script em python que renomeia todas as fotos por data",
|
| 44 |
+
"codigo",
|
| 45 |
+
"pt_BR"
|
| 46 |
+
],
|
| 47 |
+
[
|
| 48 |
+
"pq esse for no meu javascript nao para nunca",
|
| 49 |
+
"codigo",
|
| 50 |
+
"pt_BR"
|
| 51 |
+
],
|
| 52 |
+
[
|
| 53 |
+
"me explica o que faz essa funcao em rust fn main() { let x = vec![1,2]; }",
|
| 54 |
+
"codigo",
|
| 55 |
+
"pt_BR"
|
| 56 |
+
],
|
| 57 |
+
[
|
| 58 |
+
"escreve uma funcao em c que inverte uma string",
|
| 59 |
+
"codigo",
|
| 60 |
+
"pt_BR"
|
| 61 |
+
],
|
| 62 |
+
[
|
| 63 |
+
"ta dando IndexError: list index out of range no meu codigo python ajuda",
|
| 64 |
+
"codigo",
|
| 65 |
+
"pt_BR"
|
| 66 |
+
],
|
| 67 |
+
[
|
| 68 |
+
"cria uma classe java de conta bancaria com saque e deposito",
|
| 69 |
+
"codigo",
|
| 70 |
+
"pt_BR"
|
| 71 |
+
],
|
| 72 |
+
[
|
| 73 |
+
"como faço um loop em bash que le linha por linha dum arquivo dentro do meu script",
|
| 74 |
+
"codigo",
|
| 75 |
+
"pt_BR"
|
| 76 |
+
],
|
| 77 |
+
[
|
| 78 |
+
"arruma essa query sql SELECT nome FROM clientes WHERE idade > 18 GROUP nome",
|
| 79 |
+
"codigo",
|
| 80 |
+
"pt_BR"
|
| 81 |
+
],
|
| 82 |
+
[
|
| 83 |
+
"meu wifi sumiu depois que atualizei o ubuntu o que faço",
|
| 84 |
+
"tecnico",
|
| 85 |
+
"pt_BR"
|
| 86 |
+
],
|
| 87 |
+
[
|
| 88 |
+
"como instala o driver da nvidia no fedora",
|
| 89 |
+
"tecnico",
|
| 90 |
+
"pt_BR"
|
| 91 |
+
],
|
| 92 |
+
[
|
| 93 |
+
"o apt ta dando erro de dpkg interrupted",
|
| 94 |
+
"tecnico",
|
| 95 |
+
"pt_BR"
|
| 96 |
+
],
|
| 97 |
+
[
|
| 98 |
+
"pq meu linux demora 3 minutos pra ligar",
|
| 99 |
+
"tecnico",
|
| 100 |
+
"pt_BR"
|
| 101 |
+
],
|
| 102 |
+
[
|
| 103 |
+
"como eu vejo quanto espaço tem no disco pelo terminal",
|
| 104 |
+
"tecnico",
|
| 105 |
+
"pt_BR"
|
| 106 |
+
],
|
| 107 |
+
[
|
| 108 |
+
"o som parou de funcionar no pipewire alguem ajuda",
|
| 109 |
+
"tecnico",
|
| 110 |
+
"pt_BR"
|
| 111 |
+
],
|
| 112 |
+
[
|
| 113 |
+
"sera que da pra instalar o steam no arch como faz",
|
| 114 |
+
"tecnico",
|
| 115 |
+
"pt_BR"
|
| 116 |
+
],
|
| 117 |
+
[
|
| 118 |
+
"deu kernel panic quando liguei o pc hoje o que pode ser",
|
| 119 |
+
"tecnico",
|
| 120 |
+
"pt_BR"
|
| 121 |
+
],
|
| 122 |
+
[
|
| 123 |
+
"abre o spotify",
|
| 124 |
+
"acao",
|
| 125 |
+
"pt_BR"
|
| 126 |
+
],
|
| 127 |
+
[
|
| 128 |
+
"aumenta o volume pra 70",
|
| 129 |
+
"acao",
|
| 130 |
+
"pt_BR"
|
| 131 |
+
],
|
| 132 |
+
[
|
| 133 |
+
"desliga o bluetooth",
|
| 134 |
+
"acao",
|
| 135 |
+
"pt_BR"
|
| 136 |
+
],
|
| 137 |
+
[
|
| 138 |
+
"move os pdfs da pasta downloads pra documentos",
|
| 139 |
+
"acao",
|
| 140 |
+
"pt_BR"
|
| 141 |
+
],
|
| 142 |
+
[
|
| 143 |
+
"bloqueia a tela",
|
| 144 |
+
"acao",
|
| 145 |
+
"pt_BR"
|
| 146 |
+
],
|
| 147 |
+
[
|
| 148 |
+
"ativa o modo escuro por favor",
|
| 149 |
+
"acao",
|
| 150 |
+
"pt_BR"
|
| 151 |
+
],
|
| 152 |
+
[
|
| 153 |
+
"manda um oi pro joao no telegram",
|
| 154 |
+
"acao",
|
| 155 |
+
"pt_BR"
|
| 156 |
+
],
|
| 157 |
+
[
|
| 158 |
+
"tira um print da tela e salva na area de trabalho",
|
| 159 |
+
"acao",
|
| 160 |
+
"pt_BR"
|
| 161 |
+
],
|
| 162 |
+
[
|
| 163 |
+
"quanto ta o dolar hoje",
|
| 164 |
+
"busca",
|
| 165 |
+
"pt_BR"
|
| 166 |
+
],
|
| 167 |
+
[
|
| 168 |
+
"quem ganhou o jogo do flamengo ontem",
|
| 169 |
+
"busca",
|
| 170 |
+
"pt_BR"
|
| 171 |
+
],
|
| 172 |
+
[
|
| 173 |
+
"previsao do tempo pra francisco beltrao amanha",
|
| 174 |
+
"busca",
|
| 175 |
+
"pt_BR"
|
| 176 |
+
],
|
| 177 |
+
[
|
| 178 |
+
"qual o preço da rtx 5070 no kabum",
|
| 179 |
+
"busca",
|
| 180 |
+
"pt_BR"
|
| 181 |
+
],
|
| 182 |
+
[
|
| 183 |
+
"quando lança o gta 6",
|
| 184 |
+
"busca",
|
| 185 |
+
"pt_BR"
|
| 186 |
+
],
|
| 187 |
+
[
|
| 188 |
+
"acha um tutorial no youtube de como trocar pastilha de freio",
|
| 189 |
+
"busca",
|
| 190 |
+
"pt_BR"
|
| 191 |
+
],
|
| 192 |
+
[
|
| 193 |
+
"noticias de hoje sobre a economia",
|
| 194 |
+
"busca",
|
| 195 |
+
"pt_BR"
|
| 196 |
+
],
|
| 197 |
+
[
|
| 198 |
+
"vale a pena comprar o redmi note 14? ve umas reviews ai",
|
| 199 |
+
"busca",
|
| 200 |
+
"pt_BR"
|
| 201 |
+
],
|
| 202 |
+
[
|
| 203 |
+
"oi",
|
| 204 |
+
"simples",
|
| 205 |
+
"pt_BR"
|
| 206 |
+
],
|
| 207 |
+
[
|
| 208 |
+
"bom dia!!",
|
| 209 |
+
"simples",
|
| 210 |
+
"pt_BR"
|
| 211 |
+
],
|
| 212 |
+
[
|
| 213 |
+
"valeu mano",
|
| 214 |
+
"simples",
|
| 215 |
+
"pt_BR"
|
| 216 |
+
],
|
| 217 |
+
[
|
| 218 |
+
"abre o youtube",
|
| 219 |
+
"simples",
|
| 220 |
+
"pt_BR"
|
| 221 |
+
],
|
| 222 |
+
[
|
| 223 |
+
"tchau ate amanha",
|
| 224 |
+
"simples",
|
| 225 |
+
"pt_BR"
|
| 226 |
+
],
|
| 227 |
+
[
|
| 228 |
+
"e ai como vc ta",
|
| 229 |
+
"simples",
|
| 230 |
+
"pt_BR"
|
| 231 |
+
],
|
| 232 |
+
[
|
| 233 |
+
"brigadao ajudou demais",
|
| 234 |
+
"simples",
|
| 235 |
+
"pt_BR"
|
| 236 |
+
],
|
| 237 |
+
[
|
| 238 |
+
"entra no google pra mim",
|
| 239 |
+
"simples",
|
| 240 |
+
"pt_BR"
|
| 241 |
+
],
|
| 242 |
+
[
|
| 243 |
+
"o que é fotossintese",
|
| 244 |
+
"geral",
|
| 245 |
+
"pt_BR"
|
| 246 |
+
],
|
| 247 |
+
[
|
| 248 |
+
"escreve um email pedindo folga pro meu chefe",
|
| 249 |
+
"geral",
|
| 250 |
+
"pt_BR"
|
| 251 |
+
],
|
| 252 |
+
[
|
| 253 |
+
"traduz 'eu gosto de pizza' pra ingles",
|
| 254 |
+
"geral",
|
| 255 |
+
"pt_BR"
|
| 256 |
+
],
|
| 257 |
+
[
|
| 258 |
+
"quanto é 15% de 230",
|
| 259 |
+
"geral",
|
| 260 |
+
"pt_BR"
|
| 261 |
+
],
|
| 262 |
+
[
|
| 263 |
+
"me da ideias de nome pra um gato preto",
|
| 264 |
+
"geral",
|
| 265 |
+
"pt_BR"
|
| 266 |
+
],
|
| 267 |
+
[
|
| 268 |
+
"resume a historia da revolução francesa em 5 linhas",
|
| 269 |
+
"geral",
|
| 270 |
+
"pt_BR"
|
| 271 |
+
],
|
| 272 |
+
[
|
| 273 |
+
"qual a diferença entre virus e bacteria",
|
| 274 |
+
"geral",
|
| 275 |
+
"pt_BR"
|
| 276 |
+
],
|
| 277 |
+
[
|
| 278 |
+
"oi me ajuda a fazer um poema de aniversario pra minha mae",
|
| 279 |
+
"geral",
|
| 280 |
+
"pt_BR"
|
| 281 |
+
],
|
| 282 |
+
[
|
| 283 |
+
"whats on my screen rn",
|
| 284 |
+
"visao",
|
| 285 |
+
"en"
|
| 286 |
+
],
|
| 287 |
+
[
|
| 288 |
+
"click the green checkmark at the bottom right",
|
| 289 |
+
"visao",
|
| 290 |
+
"en"
|
| 291 |
+
],
|
| 292 |
+
[
|
| 293 |
+
"can you read me the text in that dialog box",
|
| 294 |
+
"visao",
|
| 295 |
+
"en"
|
| 296 |
+
],
|
| 297 |
+
[
|
| 298 |
+
"hey so there's this weird icon in my taskbar the one that looks like a cloud what is it",
|
| 299 |
+
"visao",
|
| 300 |
+
"en"
|
| 301 |
+
],
|
| 302 |
+
[
|
| 303 |
+
"press the button at the top that says something like continue",
|
| 304 |
+
"visao",
|
| 305 |
+
"en"
|
| 306 |
+
],
|
| 307 |
+
[
|
| 308 |
+
"drag that file on the left into the trash",
|
| 309 |
+
"visao",
|
| 310 |
+
"en"
|
| 311 |
+
],
|
| 312 |
+
[
|
| 313 |
+
"i was wondering if you could tell me whats in the window thats open right now",
|
| 314 |
+
"visao",
|
| 315 |
+
"en"
|
| 316 |
+
],
|
| 317 |
+
[
|
| 318 |
+
"close the ad thats covering the middle of the page",
|
| 319 |
+
"visao",
|
| 320 |
+
"en"
|
| 321 |
+
],
|
| 322 |
+
[
|
| 323 |
+
"write a python function that checks if a number is prime",
|
| 324 |
+
"codigo",
|
| 325 |
+
"en"
|
| 326 |
+
],
|
| 327 |
+
[
|
| 328 |
+
"why does my react component keep re-rendering",
|
| 329 |
+
"codigo",
|
| 330 |
+
"en"
|
| 331 |
+
],
|
| 332 |
+
[
|
| 333 |
+
"fix this: def add(a b): return a+b",
|
| 334 |
+
"codigo",
|
| 335 |
+
"en"
|
| 336 |
+
],
|
| 337 |
+
[
|
| 338 |
+
"explain what async await does in this code snippet",
|
| 339 |
+
"codigo",
|
| 340 |
+
"en"
|
| 341 |
+
],
|
| 342 |
+
[
|
| 343 |
+
"can u make a regex that matches email addresses in javascript",
|
| 344 |
+
"codigo",
|
| 345 |
+
"en"
|
| 346 |
+
],
|
| 347 |
+
[
|
| 348 |
+
"my c++ program segfaults when i free the pointer twice help",
|
| 349 |
+
"codigo",
|
| 350 |
+
"en"
|
| 351 |
+
],
|
| 352 |
+
[
|
| 353 |
+
"write a go http server that returns hello world",
|
| 354 |
+
"codigo",
|
| 355 |
+
"en"
|
| 356 |
+
],
|
| 357 |
+
[
|
| 358 |
+
"refactor this java method its like 200 lines long and has nested ifs everywhere",
|
| 359 |
+
"codigo",
|
| 360 |
+
"en"
|
| 361 |
+
],
|
| 362 |
+
[
|
| 363 |
+
"how do i install docker on debian",
|
| 364 |
+
"tecnico",
|
| 365 |
+
"en"
|
| 366 |
+
],
|
| 367 |
+
[
|
| 368 |
+
"my second monitor isnt detected on linux mint",
|
| 369 |
+
"tecnico",
|
| 370 |
+
"en"
|
| 371 |
+
],
|
| 372 |
+
[
|
| 373 |
+
"sudo apt update gives 'could not resolve host'",
|
| 374 |
+
"tecnico",
|
| 375 |
+
"en"
|
| 376 |
+
],
|
| 377 |
+
[
|
| 378 |
+
"how to check which process is using port 8080 on linux",
|
| 379 |
+
"tecnico",
|
| 380 |
+
"en"
|
| 381 |
+
],
|
| 382 |
+
[
|
| 383 |
+
"grub is gone after installing windows how do i fix it",
|
| 384 |
+
"tecnico",
|
| 385 |
+
"en"
|
| 386 |
+
],
|
| 387 |
+
[
|
| 388 |
+
"laptop wont suspend properly on ubuntu 24.04",
|
| 389 |
+
"tecnico",
|
| 390 |
+
"en"
|
| 391 |
+
],
|
| 392 |
+
[
|
| 393 |
+
"whats the terminal command to see my cpu temperature",
|
| 394 |
+
"tecnico",
|
| 395 |
+
"en"
|
| 396 |
+
],
|
| 397 |
+
[
|
| 398 |
+
"flatpak apps look ugly and ignore my gtk theme how do i fix that",
|
| 399 |
+
"tecnico",
|
| 400 |
+
"en"
|
| 401 |
+
],
|
| 402 |
+
[
|
| 403 |
+
"open firefox",
|
| 404 |
+
"acao",
|
| 405 |
+
"en"
|
| 406 |
+
],
|
| 407 |
+
[
|
| 408 |
+
"mute",
|
| 409 |
+
"acao",
|
| 410 |
+
"en"
|
| 411 |
+
],
|
| 412 |
+
[
|
| 413 |
+
"turn the brightness down a bit",
|
| 414 |
+
"acao",
|
| 415 |
+
"en"
|
| 416 |
+
],
|
| 417 |
+
[
|
| 418 |
+
"rename report.docx on my desktop to report_final.docx",
|
| 419 |
+
"acao",
|
| 420 |
+
"en"
|
| 421 |
+
],
|
| 422 |
+
[
|
| 423 |
+
"shut down the computer in 10 minutes",
|
| 424 |
+
"acao",
|
| 425 |
+
"en"
|
| 426 |
+
],
|
| 427 |
+
[
|
| 428 |
+
"play some lofi on spotify",
|
| 429 |
+
"acao",
|
| 430 |
+
"en"
|
| 431 |
+
],
|
| 432 |
+
[
|
| 433 |
+
"connect to the wifi called HomeNet",
|
| 434 |
+
"acao",
|
| 435 |
+
"en"
|
| 436 |
+
],
|
| 437 |
+
[
|
| 438 |
+
"type 'running late be there in 5' in the slack chat with mike and send it",
|
| 439 |
+
"acao",
|
| 440 |
+
"en"
|
| 441 |
+
],
|
| 442 |
+
[
|
| 443 |
+
"bitcoin price",
|
| 444 |
+
"busca",
|
| 445 |
+
"en"
|
| 446 |
+
],
|
| 447 |
+
[
|
| 448 |
+
"who won the champions league final this year",
|
| 449 |
+
"busca",
|
| 450 |
+
"en"
|
| 451 |
+
],
|
| 452 |
+
[
|
| 453 |
+
"is it gonna rain in chicago tomorrow",
|
| 454 |
+
"busca",
|
| 455 |
+
"en"
|
| 456 |
+
],
|
| 457 |
+
[
|
| 458 |
+
"latest news on the nasa artemis mission",
|
| 459 |
+
"busca",
|
| 460 |
+
"en"
|
| 461 |
+
],
|
| 462 |
+
[
|
| 463 |
+
"when does the new zelda come out",
|
| 464 |
+
"busca",
|
| 465 |
+
"en"
|
| 466 |
+
],
|
| 467 |
+
[
|
| 468 |
+
"find me reviews of the framework laptop 16",
|
| 469 |
+
"busca",
|
| 470 |
+
"en"
|
| 471 |
+
],
|
| 472 |
+
[
|
| 473 |
+
"any good video tutorials for learning blender",
|
| 474 |
+
"busca",
|
| 475 |
+
"en"
|
| 476 |
+
],
|
| 477 |
+
[
|
| 478 |
+
"what's the cheapest flight from nyc to london next week",
|
| 479 |
+
"busca",
|
| 480 |
+
"en"
|
| 481 |
+
],
|
| 482 |
+
[
|
| 483 |
+
"hi",
|
| 484 |
+
"simples",
|
| 485 |
+
"en"
|
| 486 |
+
],
|
| 487 |
+
[
|
| 488 |
+
"thanks!!",
|
| 489 |
+
"simples",
|
| 490 |
+
"en"
|
| 491 |
+
],
|
| 492 |
+
[
|
| 493 |
+
"good morning buddy",
|
| 494 |
+
"simples",
|
| 495 |
+
"en"
|
| 496 |
+
],
|
| 497 |
+
[
|
| 498 |
+
"open reddit",
|
| 499 |
+
"simples",
|
| 500 |
+
"en"
|
| 501 |
+
],
|
| 502 |
+
[
|
| 503 |
+
"cya",
|
| 504 |
+
"simples",
|
| 505 |
+
"en"
|
| 506 |
+
],
|
| 507 |
+
[
|
| 508 |
+
"how's it going",
|
| 509 |
+
"simples",
|
| 510 |
+
"en"
|
| 511 |
+
],
|
| 512 |
+
[
|
| 513 |
+
"ty that worked",
|
| 514 |
+
"simples",
|
| 515 |
+
"en"
|
| 516 |
+
],
|
| 517 |
+
[
|
| 518 |
+
"go to netflix",
|
| 519 |
+
"simples",
|
| 520 |
+
"en"
|
| 521 |
+
],
|
| 522 |
+
[
|
| 523 |
+
"what is quantum entanglement in simple terms",
|
| 524 |
+
"geral",
|
| 525 |
+
"en"
|
| 526 |
+
],
|
| 527 |
+
[
|
| 528 |
+
"write a cover letter for a barista job",
|
| 529 |
+
"geral",
|
| 530 |
+
"en"
|
| 531 |
+
],
|
| 532 |
+
[
|
| 533 |
+
"translate 'where is the train station' to german",
|
| 534 |
+
"geral",
|
| 535 |
+
"en"
|
| 536 |
+
],
|
| 537 |
+
[
|
| 538 |
+
"whats 17 times 23",
|
| 539 |
+
"geral",
|
| 540 |
+
"en"
|
| 541 |
+
],
|
| 542 |
+
[
|
| 543 |
+
"give me some ideas for a 10 year old birthday party",
|
| 544 |
+
"geral",
|
| 545 |
+
"en"
|
| 546 |
+
],
|
| 547 |
+
[
|
| 548 |
+
"summarize the plot of hamlet",
|
| 549 |
+
"geral",
|
| 550 |
+
"en"
|
| 551 |
+
],
|
| 552 |
+
[
|
| 553 |
+
"hey can you explain the difference between weather and climate",
|
| 554 |
+
"geral",
|
| 555 |
+
"en"
|
| 556 |
+
],
|
| 557 |
+
[
|
| 558 |
+
"any tips for sleeping better",
|
| 559 |
+
"geral",
|
| 560 |
+
"en"
|
| 561 |
+
],
|
| 562 |
+
[
|
| 563 |
+
"que dice la ventana que acabo de abrir",
|
| 564 |
+
"visao",
|
| 565 |
+
"es"
|
| 566 |
+
],
|
| 567 |
+
[
|
| 568 |
+
"dale click al boton rojo de arriba",
|
| 569 |
+
"visao",
|
| 570 |
+
"es"
|
| 571 |
+
],
|
| 572 |
+
[
|
| 573 |
+
"lee lo que pone en la pantalla porfa",
|
| 574 |
+
"visao",
|
| 575 |
+
"es"
|
| 576 |
+
],
|
| 577 |
+
[
|
| 578 |
+
"hola oye mira mi pantalla y dime que programa es ese de la izquierda",
|
| 579 |
+
"visao",
|
| 580 |
+
"es"
|
| 581 |
+
],
|
| 582 |
+
[
|
| 583 |
+
"pulsa el icono que parece una rueda dentada",
|
| 584 |
+
"visao",
|
| 585 |
+
"es"
|
| 586 |
+
],
|
| 587 |
+
[
|
| 588 |
+
"arrastra esa carpeta amarilla a la papelera",
|
| 589 |
+
"visao",
|
| 590 |
+
"es"
|
| 591 |
+
],
|
| 592 |
+
[
|
| 593 |
+
"me podrias describir lo que se ve ahora mismo en el monitor",
|
| 594 |
+
"visao",
|
| 595 |
+
"es"
|
| 596 |
+
],
|
| 597 |
+
[
|
| 598 |
+
"hay un mensaje en ingles en la pantalla que significa",
|
| 599 |
+
"visao",
|
| 600 |
+
"es"
|
| 601 |
+
],
|
| 602 |
+
[
|
| 603 |
+
"hazme un script en python que descargue una pagina web",
|
| 604 |
+
"codigo",
|
| 605 |
+
"es"
|
| 606 |
+
],
|
| 607 |
+
[
|
| 608 |
+
"por que mi funcion en javascript devuelve undefined",
|
| 609 |
+
"codigo",
|
| 610 |
+
"es"
|
| 611 |
+
],
|
| 612 |
+
[
|
| 613 |
+
"explicame este codigo: for i in range(10): print(i**2)",
|
| 614 |
+
"codigo",
|
| 615 |
+
"es"
|
| 616 |
+
],
|
| 617 |
+
[
|
| 618 |
+
"escribe una funcion recursiva para calcular factorial en java",
|
| 619 |
+
"codigo",
|
| 620 |
+
"es"
|
| 621 |
+
],
|
| 622 |
+
[
|
| 623 |
+
"tengo un error de sintaxis en mi php en la linea 12 ayuda",
|
| 624 |
+
"codigo",
|
| 625 |
+
"es"
|
| 626 |
+
],
|
| 627 |
+
[
|
| 628 |
+
"como hago un componente de vue que muestre una lista",
|
| 629 |
+
"codigo",
|
| 630 |
+
"es"
|
| 631 |
+
],
|
| 632 |
+
[
|
| 633 |
+
"corrige esto en c: int main() { printf(\"hola\") return 0; }",
|
| 634 |
+
"codigo",
|
| 635 |
+
"es"
|
| 636 |
+
],
|
| 637 |
+
[
|
| 638 |
+
"necesito una consulta sql que junte las tablas pedidos y clientes",
|
| 639 |
+
"codigo",
|
| 640 |
+
"es"
|
| 641 |
+
],
|
| 642 |
+
[
|
| 643 |
+
"como instalo vlc en ubuntu",
|
| 644 |
+
"tecnico",
|
| 645 |
+
"es"
|
| 646 |
+
],
|
| 647 |
+
[
|
| 648 |
+
"no me funciona el touchpad en linux",
|
| 649 |
+
"tecnico",
|
| 650 |
+
"es"
|
| 651 |
+
],
|
| 652 |
+
[
|
| 653 |
+
"me sale 'permission denied' al ejecutar un .sh",
|
| 654 |
+
"tecnico",
|
| 655 |
+
"es"
|
| 656 |
+
],
|
| 657 |
+
[
|
| 658 |
+
"como actualizo el kernel en manjaro",
|
| 659 |
+
"tecnico",
|
| 660 |
+
"es"
|
| 661 |
+
],
|
| 662 |
+
[
|
| 663 |
+
"el sistema se queda congelado cuando abro muchas pestañas que hago",
|
| 664 |
+
"tecnico",
|
| 665 |
+
"es"
|
| 666 |
+
],
|
| 667 |
+
[
|
| 668 |
+
"que comando uso para ver la ip en linux",
|
| 669 |
+
"tecnico",
|
| 670 |
+
"es"
|
| 671 |
+
],
|
| 672 |
+
[
|
| 673 |
+
"mi impresora hp no la reconoce fedora",
|
| 674 |
+
"tecnico",
|
| 675 |
+
"es"
|
| 676 |
+
],
|
| 677 |
+
[
|
| 678 |
+
"se me lleno la particion root como libero espacio",
|
| 679 |
+
"tecnico",
|
| 680 |
+
"es"
|
| 681 |
+
],
|
| 682 |
+
[
|
| 683 |
+
"abre el gestor de archivos",
|
| 684 |
+
"acao",
|
| 685 |
+
"es"
|
| 686 |
+
],
|
| 687 |
+
[
|
| 688 |
+
"sube el volumen",
|
| 689 |
+
"acao",
|
| 690 |
+
"es"
|
| 691 |
+
],
|
| 692 |
+
[
|
| 693 |
+
"apaga el wifi",
|
| 694 |
+
"acao",
|
| 695 |
+
"es"
|
| 696 |
+
],
|
| 697 |
+
[
|
| 698 |
+
"borra los archivos temporales de la carpeta descargas",
|
| 699 |
+
"acao",
|
| 700 |
+
"es"
|
| 701 |
+
],
|
| 702 |
+
[
|
| 703 |
+
"reinicia el ordenador",
|
| 704 |
+
"acao",
|
| 705 |
+
"es"
|
| 706 |
+
],
|
| 707 |
+
[
|
| 708 |
+
"pon musica en rhythmbox",
|
| 709 |
+
"acao",
|
| 710 |
+
"es"
|
| 711 |
+
],
|
| 712 |
+
[
|
| 713 |
+
"cierra el chrome porfa",
|
| 714 |
+
"acao",
|
| 715 |
+
"es"
|
| 716 |
+
],
|
| 717 |
+
[
|
| 718 |
+
"crea una carpeta llamada fotos2024 en el escritorio",
|
| 719 |
+
"acao",
|
| 720 |
+
"es"
|
| 721 |
+
],
|
| 722 |
+
[
|
| 723 |
+
"cuanto esta el euro hoy",
|
| 724 |
+
"busca",
|
| 725 |
+
"es"
|
| 726 |
+
],
|
| 727 |
+
[
|
| 728 |
+
"resultado del real madrid anoche",
|
| 729 |
+
"busca",
|
| 730 |
+
"es"
|
| 731 |
+
],
|
| 732 |
+
[
|
| 733 |
+
"que tiempo va a hacer en madrid el finde",
|
| 734 |
+
"busca",
|
| 735 |
+
"es"
|
| 736 |
+
],
|
| 737 |
+
[
|
| 738 |
+
"precio del iphone 17 en mexico",
|
| 739 |
+
"busca",
|
| 740 |
+
"es"
|
| 741 |
+
],
|
| 742 |
+
[
|
| 743 |
+
"ultimas noticias de argentina",
|
| 744 |
+
"busca",
|
| 745 |
+
"es"
|
| 746 |
+
],
|
| 747 |
+
[
|
| 748 |
+
"cuando sale la nueva temporada de the last of us",
|
| 749 |
+
"busca",
|
| 750 |
+
"es"
|
| 751 |
+
],
|
| 752 |
+
[
|
| 753 |
+
"buscame un tutorial de como hacer pan casero",
|
| 754 |
+
"busca",
|
| 755 |
+
"es"
|
| 756 |
+
],
|
| 757 |
+
[
|
| 758 |
+
"opiniones del xiaomi 15 vale la pena",
|
| 759 |
+
"busca",
|
| 760 |
+
"es"
|
| 761 |
+
],
|
| 762 |
+
[
|
| 763 |
+
"hola",
|
| 764 |
+
"simples",
|
| 765 |
+
"es"
|
| 766 |
+
],
|
| 767 |
+
[
|
| 768 |
+
"gracias!",
|
| 769 |
+
"simples",
|
| 770 |
+
"es"
|
| 771 |
+
],
|
| 772 |
+
[
|
| 773 |
+
"buenas noches",
|
| 774 |
+
"simples",
|
| 775 |
+
"es"
|
| 776 |
+
],
|
| 777 |
+
[
|
| 778 |
+
"abre facebook",
|
| 779 |
+
"simples",
|
| 780 |
+
"es"
|
| 781 |
+
],
|
| 782 |
+
[
|
| 783 |
+
"adios",
|
| 784 |
+
"simples",
|
| 785 |
+
"es"
|
| 786 |
+
],
|
| 787 |
+
[
|
| 788 |
+
"que tal todo",
|
| 789 |
+
"simples",
|
| 790 |
+
"es"
|
| 791 |
+
],
|
| 792 |
+
[
|
| 793 |
+
"muchas gracias crack",
|
| 794 |
+
"simples",
|
| 795 |
+
"es"
|
| 796 |
+
],
|
| 797 |
+
[
|
| 798 |
+
"entra a youtube",
|
| 799 |
+
"simples",
|
| 800 |
+
"es"
|
| 801 |
+
],
|
| 802 |
+
[
|
| 803 |
+
"que es la inflacion",
|
| 804 |
+
"geral",
|
| 805 |
+
"es"
|
| 806 |
+
],
|
| 807 |
+
[
|
| 808 |
+
"escribeme una carta de renuncia formal",
|
| 809 |
+
"geral",
|
| 810 |
+
"es"
|
| 811 |
+
],
|
| 812 |
+
[
|
| 813 |
+
"como se dice 'buenos dias' en frances",
|
| 814 |
+
"geral",
|
| 815 |
+
"es"
|
| 816 |
+
],
|
| 817 |
+
[
|
| 818 |
+
"cuanto es la raiz cuadrada de 144",
|
| 819 |
+
"geral",
|
| 820 |
+
"es"
|
| 821 |
+
],
|
| 822 |
+
[
|
| 823 |
+
"dame ideas para regalar a mi novia",
|
| 824 |
+
"geral",
|
| 825 |
+
"es"
|
| 826 |
+
],
|
| 827 |
+
[
|
| 828 |
+
"resume la segunda guerra mundial en un parrafo",
|
| 829 |
+
"geral",
|
| 830 |
+
"es"
|
| 831 |
+
],
|
| 832 |
+
[
|
| 833 |
+
"por que el cielo es azul",
|
| 834 |
+
"geral",
|
| 835 |
+
"es"
|
| 836 |
+
],
|
| 837 |
+
[
|
| 838 |
+
"hola me ayudas a escribir un cuento corto para niños",
|
| 839 |
+
"geral",
|
| 840 |
+
"es"
|
| 841 |
+
],
|
| 842 |
+
[
|
| 843 |
+
"quest ce qui est affiché sur mon ecran",
|
| 844 |
+
"visao",
|
| 845 |
+
"fr"
|
| 846 |
+
],
|
| 847 |
+
[
|
| 848 |
+
"clique sur le bouton vert en bas",
|
| 849 |
+
"visao",
|
| 850 |
+
"fr"
|
| 851 |
+
],
|
| 852 |
+
[
|
| 853 |
+
"lis moi le message d'erreur qui vient d'apparaitre",
|
| 854 |
+
"visao",
|
| 855 |
+
"fr"
|
| 856 |
+
],
|
| 857 |
+
[
|
| 858 |
+
"salut tu peux regarder l'ecran et me dire c'est quoi cette fenetre",
|
| 859 |
+
"visao",
|
| 860 |
+
"fr"
|
| 861 |
+
],
|
| 862 |
+
[
|
| 863 |
+
"appuie sur la petite icone en forme de cloche en haut a droite",
|
| 864 |
+
"visao",
|
| 865 |
+
"fr"
|
| 866 |
+
],
|
| 867 |
+
[
|
| 868 |
+
"glisse l'image a gauche dans le dossier a coté",
|
| 869 |
+
"visao",
|
| 870 |
+
"fr"
|
| 871 |
+
],
|
| 872 |
+
[
|
| 873 |
+
"decris ce que tu vois sur mon bureau",
|
| 874 |
+
"visao",
|
| 875 |
+
"fr"
|
| 876 |
+
],
|
| 877 |
+
[
|
| 878 |
+
"ferme la pub qui cache le texte au milieu",
|
| 879 |
+
"visao",
|
| 880 |
+
"fr"
|
| 881 |
+
],
|
| 882 |
+
[
|
| 883 |
+
"ecris un script python qui compte les mots dans un fichier",
|
| 884 |
+
"codigo",
|
| 885 |
+
"fr"
|
| 886 |
+
],
|
| 887 |
+
[
|
| 888 |
+
"pourquoi mon code javascript affiche NaN",
|
| 889 |
+
"codigo",
|
| 890 |
+
"fr"
|
| 891 |
+
],
|
| 892 |
+
[
|
| 893 |
+
"explique moi ce que fait ce code: x = [i for i in range(5) if i % 2]",
|
| 894 |
+
"codigo",
|
| 895 |
+
"fr"
|
| 896 |
+
],
|
| 897 |
+
[
|
| 898 |
+
"fais une fonction en typescript qui trie un tableau d'objets par date",
|
| 899 |
+
"codigo",
|
| 900 |
+
"fr"
|
| 901 |
+
],
|
| 902 |
+
[
|
| 903 |
+
"j'ai une erreur NullPointerException en java je comprends pas",
|
| 904 |
+
"codigo",
|
| 905 |
+
"fr"
|
| 906 |
+
],
|
| 907 |
+
[
|
| 908 |
+
"corrige ma boucle while en c elle tourne a l'infini",
|
| 909 |
+
"codigo",
|
| 910 |
+
"fr"
|
| 911 |
+
],
|
| 912 |
+
[
|
| 913 |
+
"comment faire une api rest avec flask",
|
| 914 |
+
"codigo",
|
| 915 |
+
"fr"
|
| 916 |
+
],
|
| 917 |
+
[
|
| 918 |
+
"ecris un makefile pour compiler mon projet c++",
|
| 919 |
+
"codigo",
|
| 920 |
+
"fr"
|
| 921 |
+
],
|
| 922 |
+
[
|
| 923 |
+
"comment installer spotify sur ubuntu",
|
| 924 |
+
"tecnico",
|
| 925 |
+
"fr"
|
| 926 |
+
],
|
| 927 |
+
[
|
| 928 |
+
"mon bluetooth marche plus depuis la mise a jour de debian",
|
| 929 |
+
"tecnico",
|
| 930 |
+
"fr"
|
| 931 |
+
],
|
| 932 |
+
[
|
| 933 |
+
"j'ai une erreur 'unable to locate package' avec apt",
|
| 934 |
+
"tecnico",
|
| 935 |
+
"fr"
|
| 936 |
+
],
|
| 937 |
+
[
|
| 938 |
+
"comment voir la ram utilisée dans le terminal",
|
| 939 |
+
"tecnico",
|
| 940 |
+
"fr"
|
| 941 |
+
],
|
| 942 |
+
[
|
| 943 |
+
"l'ecran reste noir apres le demarrage de linux",
|
| 944 |
+
"tecnico",
|
| 945 |
+
"fr"
|
| 946 |
+
],
|
| 947 |
+
[
|
| 948 |
+
"comment monter un disque usb en ligne de commande",
|
| 949 |
+
"tecnico",
|
| 950 |
+
"fr"
|
| 951 |
+
],
|
| 952 |
+
[
|
| 953 |
+
"ma carte wifi realtek est pas reconnue sur mint",
|
| 954 |
+
"tecnico",
|
| 955 |
+
"fr"
|
| 956 |
+
],
|
| 957 |
+
[
|
| 958 |
+
"est ce que je peux changer d'environnement de bureau sans reinstaller linux",
|
| 959 |
+
"tecnico",
|
| 960 |
+
"fr"
|
| 961 |
+
],
|
| 962 |
+
[
|
| 963 |
+
"ouvre thunderbird",
|
| 964 |
+
"acao",
|
| 965 |
+
"fr"
|
| 966 |
+
],
|
| 967 |
+
[
|
| 968 |
+
"baisse le son",
|
| 969 |
+
"acao",
|
| 970 |
+
"fr"
|
| 971 |
+
],
|
| 972 |
+
[
|
| 973 |
+
"active le bluetooth",
|
| 974 |
+
"acao",
|
| 975 |
+
"fr"
|
| 976 |
+
],
|
| 977 |
+
[
|
| 978 |
+
"supprime le fichier brouillon.txt sur le bureau",
|
| 979 |
+
"acao",
|
| 980 |
+
"fr"
|
| 981 |
+
],
|
| 982 |
+
[
|
| 983 |
+
"verrouille l'ordi",
|
| 984 |
+
"acao",
|
| 985 |
+
"fr"
|
| 986 |
+
],
|
| 987 |
+
[
|
| 988 |
+
"mets le mode nuit",
|
| 989 |
+
"acao",
|
| 990 |
+
"fr"
|
| 991 |
+
],
|
| 992 |
+
[
|
| 993 |
+
"lance une playlist jazz",
|
| 994 |
+
"acao",
|
| 995 |
+
"fr"
|
| 996 |
+
],
|
| 997 |
+
[
|
| 998 |
+
"fais une capture d'ecran",
|
| 999 |
+
"acao",
|
| 1000 |
+
"fr"
|
| 1001 |
+
],
|
| 1002 |
+
[
|
| 1003 |
+
"meteo paris demain",
|
| 1004 |
+
"busca",
|
| 1005 |
+
"fr"
|
| 1006 |
+
],
|
| 1007 |
+
[
|
| 1008 |
+
"resultat psg hier soir",
|
| 1009 |
+
"busca",
|
| 1010 |
+
"fr"
|
| 1011 |
+
],
|
| 1012 |
+
[
|
| 1013 |
+
"prix de l'essence en france aujourd'hui",
|
| 1014 |
+
"busca",
|
| 1015 |
+
"fr"
|
| 1016 |
+
],
|
| 1017 |
+
[
|
| 1018 |
+
"les actualités du jour",
|
| 1019 |
+
"busca",
|
| 1020 |
+
"fr"
|
| 1021 |
+
],
|
| 1022 |
+
[
|
| 1023 |
+
"date de sortie du prochain film marvel",
|
| 1024 |
+
"busca",
|
| 1025 |
+
"fr"
|
| 1026 |
+
],
|
| 1027 |
+
[
|
| 1028 |
+
"trouve moi des avis sur le steam deck oled",
|
| 1029 |
+
"busca",
|
| 1030 |
+
"fr"
|
| 1031 |
+
],
|
| 1032 |
+
[
|
| 1033 |
+
"cours de l'action apple",
|
| 1034 |
+
"busca",
|
| 1035 |
+
"fr"
|
| 1036 |
+
],
|
| 1037 |
+
[
|
| 1038 |
+
"cherche une video pour apprendre a jouer de la guitare",
|
| 1039 |
+
"busca",
|
| 1040 |
+
"fr"
|
| 1041 |
+
],
|
| 1042 |
+
[
|
| 1043 |
+
"bonjour",
|
| 1044 |
+
"simples",
|
| 1045 |
+
"fr"
|
| 1046 |
+
],
|
| 1047 |
+
[
|
| 1048 |
+
"merci beaucoup",
|
| 1049 |
+
"simples",
|
| 1050 |
+
"fr"
|
| 1051 |
+
],
|
| 1052 |
+
[
|
| 1053 |
+
"coucou ca va",
|
| 1054 |
+
"simples",
|
| 1055 |
+
"fr"
|
| 1056 |
+
],
|
| 1057 |
+
[
|
| 1058 |
+
"ouvre youtube",
|
| 1059 |
+
"simples",
|
| 1060 |
+
"fr"
|
| 1061 |
+
],
|
| 1062 |
+
[
|
| 1063 |
+
"a plus",
|
| 1064 |
+
"simples",
|
| 1065 |
+
"fr"
|
| 1066 |
+
],
|
| 1067 |
+
[
|
| 1068 |
+
"salut toi",
|
| 1069 |
+
"simples",
|
| 1070 |
+
"fr"
|
| 1071 |
+
],
|
| 1072 |
+
[
|
| 1073 |
+
"super merci c'est parfait",
|
| 1074 |
+
"simples",
|
| 1075 |
+
"fr"
|
| 1076 |
+
],
|
| 1077 |
+
[
|
| 1078 |
+
"va sur wikipedia",
|
| 1079 |
+
"simples",
|
| 1080 |
+
"fr"
|
| 1081 |
+
],
|
| 1082 |
+
[
|
| 1083 |
+
"c'est quoi la relativité",
|
| 1084 |
+
"geral",
|
| 1085 |
+
"fr"
|
| 1086 |
+
],
|
| 1087 |
+
[
|
| 1088 |
+
"ecris un message d'excuse pour mon retard au travail",
|
| 1089 |
+
"geral",
|
| 1090 |
+
"fr"
|
| 1091 |
+
],
|
| 1092 |
+
[
|
| 1093 |
+
"traduis 'good night' en espagnol",
|
| 1094 |
+
"geral",
|
| 1095 |
+
"fr"
|
| 1096 |
+
],
|
| 1097 |
+
[
|
| 1098 |
+
"combien font 48 divisé par 6",
|
| 1099 |
+
"geral",
|
| 1100 |
+
"fr"
|
| 1101 |
+
],
|
| 1102 |
+
[
|
| 1103 |
+
"donne moi des idées de recettes avec des courgettes",
|
| 1104 |
+
"geral",
|
| 1105 |
+
"fr"
|
| 1106 |
+
],
|
| 1107 |
+
[
|
| 1108 |
+
"resume moi le petit prince",
|
| 1109 |
+
"geral",
|
| 1110 |
+
"fr"
|
| 1111 |
+
],
|
| 1112 |
+
[
|
| 1113 |
+
"quelle est la capitale de l'australie",
|
| 1114 |
+
"geral",
|
| 1115 |
+
"fr"
|
| 1116 |
+
],
|
| 1117 |
+
[
|
| 1118 |
+
"des conseils pour apprendre l'anglais plus vite",
|
| 1119 |
+
"geral",
|
| 1120 |
+
"fr"
|
| 1121 |
+
],
|
| 1122 |
+
[
|
| 1123 |
+
"was steht da auf meinem bildschirm",
|
| 1124 |
+
"visao",
|
| 1125 |
+
"de"
|
| 1126 |
+
],
|
| 1127 |
+
[
|
| 1128 |
+
"klick mal auf den blauen knopf unten links",
|
| 1129 |
+
"visao",
|
| 1130 |
+
"de"
|
| 1131 |
+
],
|
| 1132 |
+
[
|
| 1133 |
+
"lies mir die fehlermeldung vor die gerade aufgepoppt ist",
|
| 1134 |
+
"visao",
|
| 1135 |
+
"de"
|
| 1136 |
+
],
|
| 1137 |
+
[
|
| 1138 |
+
"hallo kannst du auf den screen schauen und sagen welches programm das ist",
|
| 1139 |
+
"visao",
|
| 1140 |
+
"de"
|
| 1141 |
+
],
|
| 1142 |
+
[
|
| 1143 |
+
"drück auf das zahnrad symbol oben",
|
| 1144 |
+
"visao",
|
| 1145 |
+
"de"
|
| 1146 |
+
],
|
| 1147 |
+
[
|
| 1148 |
+
"zieh das bild rechts in den ordner daneben",
|
| 1149 |
+
"visao",
|
| 1150 |
+
"de"
|
| 1151 |
+
],
|
| 1152 |
+
[
|
| 1153 |
+
"beschreib mal was gerade auf dem monitor zu sehen ist",
|
| 1154 |
+
"visao",
|
| 1155 |
+
"de"
|
| 1156 |
+
],
|
| 1157 |
+
[
|
| 1158 |
+
"da ist so ein fenster in der mitte mach das mal zu",
|
| 1159 |
+
"visao",
|
| 1160 |
+
"de"
|
| 1161 |
+
],
|
| 1162 |
+
[
|
| 1163 |
+
"schreib ein python skript das csv dateien zusammenfügt",
|
| 1164 |
+
"codigo",
|
| 1165 |
+
"de"
|
| 1166 |
+
],
|
| 1167 |
+
[
|
| 1168 |
+
"warum gibt meine java methode immer null zurück",
|
| 1169 |
+
"codigo",
|
| 1170 |
+
"de"
|
| 1171 |
+
],
|
| 1172 |
+
[
|
| 1173 |
+
"erklär mir diesen code: const x = arr.map(a => a * 2)",
|
| 1174 |
+
"codigo",
|
| 1175 |
+
"de"
|
| 1176 |
+
],
|
| 1177 |
+
[
|
| 1178 |
+
"mach eine funktion in rust die fibonacci zahlen berechnet",
|
| 1179 |
+
"codigo",
|
| 1180 |
+
"de"
|
| 1181 |
+
],
|
| 1182 |
+
[
|
| 1183 |
+
"mein c programm kompiliert nicht undefined reference to main",
|
| 1184 |
+
"codigo",
|
| 1185 |
+
"de"
|
| 1186 |
+
],
|
| 1187 |
+
[
|
| 1188 |
+
"wie schreibe ich einen unit test in pytest",
|
| 1189 |
+
"codigo",
|
| 1190 |
+
"de"
|
| 1191 |
+
],
|
| 1192 |
+
[
|
| 1193 |
+
"korrigier das bitte: if x = 5: print(x)",
|
| 1194 |
+
"codigo",
|
| 1195 |
+
"de"
|
| 1196 |
+
],
|
| 1197 |
+
[
|
| 1198 |
+
"bau mir eine html seite mit einem formular und javascript validierung",
|
| 1199 |
+
"codigo",
|
| 1200 |
+
"de"
|
| 1201 |
+
],
|
| 1202 |
+
[
|
| 1203 |
+
"wie installiere ich gimp unter linux",
|
| 1204 |
+
"tecnico",
|
| 1205 |
+
"de"
|
| 1206 |
+
],
|
| 1207 |
+
[
|
| 1208 |
+
"mein sound geht nicht mehr seit dem update",
|
| 1209 |
+
"tecnico",
|
| 1210 |
+
"de"
|
| 1211 |
+
],
|
| 1212 |
+
[
|
| 1213 |
+
"apt sagt 'unmet dependencies' was tun",
|
| 1214 |
+
"tecnico",
|
| 1215 |
+
"de"
|
| 1216 |
+
],
|
| 1217 |
+
[
|
| 1218 |
+
"wie finde ich raus welche grafikkarte ich hab im terminal",
|
| 1219 |
+
"tecnico",
|
| 1220 |
+
"de"
|
| 1221 |
+
],
|
| 1222 |
+
[
|
| 1223 |
+
"linux bootet nur noch in die emergency shell",
|
| 1224 |
+
"tecnico",
|
| 1225 |
+
"de"
|
| 1226 |
+
],
|
| 1227 |
+
[
|
| 1228 |
+
"wie mach ich ein programm unter ubuntu zum autostart dienst mit systemd",
|
| 1229 |
+
"tecnico",
|
| 1230 |
+
"de"
|
| 1231 |
+
],
|
| 1232 |
+
[
|
| 1233 |
+
"meine festplatte wird unter fedora nicht angezeigt",
|
| 1234 |
+
"tecnico",
|
| 1235 |
+
"de"
|
| 1236 |
+
],
|
| 1237 |
+
[
|
| 1238 |
+
"welcher befehl zeigt mir die laufenden prozesse",
|
| 1239 |
+
"tecnico",
|
| 1240 |
+
"de"
|
| 1241 |
+
],
|
| 1242 |
+
[
|
| 1243 |
+
"öffne vs code",
|
| 1244 |
+
"acao",
|
| 1245 |
+
"de"
|
| 1246 |
+
],
|
| 1247 |
+
[
|
| 1248 |
+
"lautstärke auf 30",
|
| 1249 |
+
"acao",
|
| 1250 |
+
"de"
|
| 1251 |
+
],
|
| 1252 |
+
[
|
| 1253 |
+
"wlan aus",
|
| 1254 |
+
"acao",
|
| 1255 |
+
"de"
|
| 1256 |
+
],
|
| 1257 |
+
[
|
| 1258 |
+
"verschieb alle bilder aus downloads in den ordner bilder",
|
| 1259 |
+
"acao",
|
| 1260 |
+
"de"
|
| 1261 |
+
],
|
| 1262 |
+
[
|
| 1263 |
+
"fahr den rechner runter",
|
| 1264 |
+
"acao",
|
| 1265 |
+
"de"
|
| 1266 |
+
],
|
| 1267 |
+
[
|
| 1268 |
+
"spiel was von rammstein",
|
| 1269 |
+
"acao",
|
| 1270 |
+
"de"
|
| 1271 |
+
],
|
| 1272 |
+
[
|
| 1273 |
+
"schließ alle fenster von libreoffice",
|
| 1274 |
+
"acao",
|
| 1275 |
+
"de"
|
| 1276 |
+
],
|
| 1277 |
+
[
|
| 1278 |
+
"schick meiner frau auf whatsapp dass ich später komme",
|
| 1279 |
+
"acao",
|
| 1280 |
+
"de"
|
| 1281 |
+
],
|
| 1282 |
+
[
|
| 1283 |
+
"wetter berlin morgen",
|
| 1284 |
+
"busca",
|
| 1285 |
+
"de"
|
| 1286 |
+
],
|
| 1287 |
+
[
|
| 1288 |
+
"wie hat bayern gestern gespielt",
|
| 1289 |
+
"busca",
|
| 1290 |
+
"de"
|
| 1291 |
+
],
|
| 1292 |
+
[
|
| 1293 |
+
"aktueller goldpreis",
|
| 1294 |
+
"busca",
|
| 1295 |
+
"de"
|
| 1296 |
+
],
|
| 1297 |
+
[
|
| 1298 |
+
"nachrichten von heute",
|
| 1299 |
+
"busca",
|
| 1300 |
+
"de"
|
| 1301 |
+
],
|
| 1302 |
+
[
|
| 1303 |
+
"wann erscheint die nächste playstation",
|
| 1304 |
+
"busca",
|
| 1305 |
+
"de"
|
| 1306 |
+
],
|
| 1307 |
+
[
|
| 1308 |
+
"such mir tests zum pixel 10",
|
| 1309 |
+
"busca",
|
| 1310 |
+
"de"
|
| 1311 |
+
],
|
| 1312 |
+
[
|
| 1313 |
+
"gibts ein gutes youtube tutorial zum fliesen legen",
|
| 1314 |
+
"busca",
|
| 1315 |
+
"de"
|
| 1316 |
+
],
|
| 1317 |
+
[
|
| 1318 |
+
"was kostet ein ticket für die bahn von münchen nach hamburg",
|
| 1319 |
+
"busca",
|
| 1320 |
+
"de"
|
| 1321 |
+
],
|
| 1322 |
+
[
|
| 1323 |
+
"hallo",
|
| 1324 |
+
"simples",
|
| 1325 |
+
"de"
|
| 1326 |
+
],
|
| 1327 |
+
[
|
| 1328 |
+
"danke dir",
|
| 1329 |
+
"simples",
|
| 1330 |
+
"de"
|
| 1331 |
+
],
|
| 1332 |
+
[
|
| 1333 |
+
"guten morgen",
|
| 1334 |
+
"simples",
|
| 1335 |
+
"de"
|
| 1336 |
+
],
|
| 1337 |
+
[
|
| 1338 |
+
"öffne youtube",
|
| 1339 |
+
"simples",
|
| 1340 |
+
"de"
|
| 1341 |
+
],
|
| 1342 |
+
[
|
| 1343 |
+
"tschüss",
|
| 1344 |
+
"simples",
|
| 1345 |
+
"de"
|
| 1346 |
+
],
|
| 1347 |
+
[
|
| 1348 |
+
"na wie gehts",
|
| 1349 |
+
"simples",
|
| 1350 |
+
"de"
|
| 1351 |
+
],
|
| 1352 |
+
[
|
| 1353 |
+
"vielen dank hat geklappt",
|
| 1354 |
+
"simples",
|
| 1355 |
+
"de"
|
| 1356 |
+
],
|
| 1357 |
+
[
|
| 1358 |
+
"geh auf amazon",
|
| 1359 |
+
"simples",
|
| 1360 |
+
"de"
|
| 1361 |
+
],
|
| 1362 |
+
[
|
| 1363 |
+
"was ist ein schwarzes loch",
|
| 1364 |
+
"geral",
|
| 1365 |
+
"de"
|
| 1366 |
+
],
|
| 1367 |
+
[
|
| 1368 |
+
"schreib mir eine geburtstagskarte für meinen opa",
|
| 1369 |
+
"geral",
|
| 1370 |
+
"de"
|
| 1371 |
+
],
|
| 1372 |
+
[
|
| 1373 |
+
"übersetze 'ich habe hunger' ins englische",
|
| 1374 |
+
"geral",
|
| 1375 |
+
"de"
|
| 1376 |
+
],
|
| 1377 |
+
[
|
| 1378 |
+
"was ist 12 hoch 2",
|
| 1379 |
+
"geral",
|
| 1380 |
+
"de"
|
| 1381 |
+
],
|
| 1382 |
+
[
|
| 1383 |
+
"gib mir ideen für ein wochenende zu zweit",
|
| 1384 |
+
"geral",
|
| 1385 |
+
"de"
|
| 1386 |
+
],
|
| 1387 |
+
[
|
| 1388 |
+
"fass mir den inhalt von faust kurz zusammen",
|
| 1389 |
+
"geral",
|
| 1390 |
+
"de"
|
| 1391 |
+
],
|
| 1392 |
+
[
|
| 1393 |
+
"warum haben wir jahreszeiten",
|
| 1394 |
+
"geral",
|
| 1395 |
+
"de"
|
| 1396 |
+
],
|
| 1397 |
+
[
|
| 1398 |
+
"hi ich brauch tipps wie ich mich besser konzentrieren kann",
|
| 1399 |
+
"geral",
|
| 1400 |
+
"de"
|
| 1401 |
+
]
|
| 1402 |
+
]
|
app/murph/teste_cego.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Teste CEGO: 280 pedidos "bagunçados" (erros de digitação, gíria, sem
|
| 2 |
+
AVISO (4.0 Endurance Neo): este script de desenvolvimento usa o tars_classificador.py
|
| 3 |
+
(Naive Bayes), que saiu do openTARS. Pra rodar, pegue esse arquivo da 4.0 Endurance.
|
| 4 |
+
acento, bem curtos ou compridos) escritos por um agente que não viu nada
|
| 5 |
+
do openTARS: nem o treino, nem o teste, nem a Murph. Rodado UMA vez, com
|
| 6 |
+
o modelo já congelado.
|
| 7 |
+
|
| 8 |
+
python3 murph/teste_cego.py
|
| 9 |
+
|
| 10 |
+
Antes de medir, tira do teste qualquer pedido parecido com o TREINO da
|
| 11 |
+
Murph (senão a nota dela sairia inflada); a mesma lista vale pros dois.
|
| 12 |
+
"""
|
| 13 |
+
import json
|
| 14 |
+
import os
|
| 15 |
+
import subprocess
|
| 16 |
+
import sys
|
| 17 |
+
import tempfile
|
| 18 |
+
|
| 19 |
+
AQUI = os.path.dirname(os.path.abspath(__file__))
|
| 20 |
+
sys.path.insert(0, AQUI)
|
| 21 |
+
from dados import treino, RAIZ # noqa: E402
|
| 22 |
+
|
| 23 |
+
ARQUIVO = os.path.join(AQUI, "teste_cego.json")
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def frases_validas():
|
| 27 |
+
sys.path.insert(0, RAIZ)
|
| 28 |
+
import tars_classificador as cl
|
| 29 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
| 30 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
| 31 |
+
todas = [tuple(x) for x in json.load(open(ARQUIVO, encoding="utf-8"))]
|
| 32 |
+
ger = [f for f, _, _ in json.load(open(os.path.join(AQUI, "gerado_limpo.json"), encoding="utf-8"))]
|
| 33 |
+
base = [f for f, _ in treino()] + ger
|
| 34 |
+
|
| 35 |
+
def palavras(f):
|
| 36 |
+
return set(cl.tokens(cl.normalizar(f))) - cl.VAZIAS
|
| 37 |
+
vec = TfidfVectorizer(analyzer="char_wb", ngram_range=(3, 5)).fit(base + [f for f, _, _ in todas])
|
| 38 |
+
sim = cosine_similarity(vec.transform([f for f, _, _ in todas]), vec.transform(base))
|
| 39 |
+
bp = [palavras(b) for b in base]
|
| 40 |
+
boas = []
|
| 41 |
+
for i, (f, c, idi) in enumerate(todas):
|
| 42 |
+
a = palavras(f)
|
| 43 |
+
jac = max((len(a & b) / len(a | b) if a and b else 0) for b in bp)
|
| 44 |
+
if sim[i].max() < 0.6 and jac < 0.4:
|
| 45 |
+
boas.append((f, c, idi))
|
| 46 |
+
return todas, boas
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
def modo_auto(ajudante_perfeito, frases):
|
| 50 |
+
os.environ.setdefault("XDG_CONFIG_HOME", tempfile.mkdtemp())
|
| 51 |
+
sys.path.insert(0, os.path.join(RAIZ, "tests"))
|
| 52 |
+
sys.path.insert(0, RAIZ)
|
| 53 |
+
import _util # noqa: F401
|
| 54 |
+
import tars
|
| 55 |
+
gabarito = {f: c for f, c, _ in frases}
|
| 56 |
+
chamadas = []
|
| 57 |
+
tars.ollama_online = lambda: False
|
| 58 |
+
tars.modelo_embedding = lambda *a, **k: None
|
| 59 |
+
if ajudante_perfeito:
|
| 60 |
+
tars.listar_modelos_instalados = lambda forcar=False: {tars.MODELO_AJUDANTE}
|
| 61 |
+
tars.saude_ajudante.confiavel = lambda *a, **k: True
|
| 62 |
+
|
| 63 |
+
def ajudante(texto, finalistas=None, anterior=None, pistas=None):
|
| 64 |
+
chamadas.append(texto)
|
| 65 |
+
return gabarito[texto] if not finalistas or gabarito[texto] in finalistas else finalistas[0]
|
| 66 |
+
else:
|
| 67 |
+
tars.listar_modelos_instalados = lambda forcar=False: set()
|
| 68 |
+
|
| 69 |
+
def ajudante(texto, finalistas=None, anterior=None, pistas=None):
|
| 70 |
+
return None
|
| 71 |
+
tars._classificar_com_ia = ajudante
|
| 72 |
+
certas = [tars.decidir_tarefa(f).categoria == c for f, c, _ in frases]
|
| 73 |
+
return certas, len(chamadas)
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
if __name__ == "__main__":
|
| 77 |
+
if len(sys.argv) > 2 and sys.argv[1] == "--auto":
|
| 78 |
+
frases = json.loads(sys.stdin.read())
|
| 79 |
+
certas, n = modo_auto(sys.argv[2] == "perfeito", frases)
|
| 80 |
+
print(json.dumps({"certas": certas, "chamadas": n}))
|
| 81 |
+
sys.exit(0)
|
| 82 |
+
|
| 83 |
+
todas, frases = frases_validas()
|
| 84 |
+
print(f"{len(todas)} pedidos; {len(todas) - len(frases)} saíram por parecer com o treino; valem {len(frases)}\n")
|
| 85 |
+
sys.path.insert(0, RAIZ)
|
| 86 |
+
import tars_classificador as nbm
|
| 87 |
+
import tars_murph as mm
|
| 88 |
+
murph = mm.Murph.carregar(mm.CAMINHO_PADRAO)
|
| 89 |
+
nb = nbm.Modelo(nbm.amostras_padrao())
|
| 90 |
+
n = len(frases)
|
| 91 |
+
|
| 92 |
+
def placar(nome, a, b):
|
| 93 |
+
ga = sum(x and not y for x, y in zip(a, b))
|
| 94 |
+
gb = sum(y and not x for x, y in zip(a, b))
|
| 95 |
+
print(f" NB atual {sum(a)}/{n} = {100 * sum(a) / n:.1f}% · Murph {sum(b)}/{n} = {100 * sum(b) / n:.1f}%"
|
| 96 |
+
f" (só a Murph acertou: {gb} · só o NB acertou: {ga})")
|
| 97 |
+
|
| 98 |
+
print("1. Classificador sozinho")
|
| 99 |
+
a = [nb.classificar(f)[0] == c for f, c, _ in frases]
|
| 100 |
+
b = [murph.classificar(f)[0] == c for f, c, _ in frases]
|
| 101 |
+
placar("sozinho", a, b)
|
| 102 |
+
seguras = [(f, c) for f, c, _ in frases if mm.classificar(f)["certo"]]
|
| 103 |
+
ok = sum(murph.classificar(f)[0] == c for f, c in seguras)
|
| 104 |
+
print(f" Murph segura em {len(seguras)}/{n}; acertou {ok} dessas ({100 * ok / max(1, len(seguras)):.1f}%)")
|
| 105 |
+
|
| 106 |
+
for titulo, modo in (("2. Modo AUTO sem Ollama", "sem"), ("3. Modo AUTO com ajudante perfeito", "perfeito")):
|
| 107 |
+
print(f"\n{titulo}")
|
| 108 |
+
res = {}
|
| 109 |
+
for ligada in ("off", "on"):
|
| 110 |
+
env = dict(os.environ, TARS_MURPH="off" if ligada == "off" else "")
|
| 111 |
+
saida = subprocess.run([sys.executable, __file__, "--auto", modo], env=env, check=True,
|
| 112 |
+
input=json.dumps(frases), capture_output=True, text=True).stdout
|
| 113 |
+
res[ligada] = json.loads(saida.strip().splitlines()[-1])
|
| 114 |
+
placar(titulo, res["off"]["certas"], res["on"]["certas"])
|
| 115 |
+
if modo == "perfeito":
|
| 116 |
+
print(f" chamadas ao ajudante: NB {res['off']['chamadas']} · Murph {res['on']['chamadas']}")
|
| 117 |
+
|
| 118 |
+
print("\nPor idioma (sozinhos): ", end="")
|
| 119 |
+
for idi in ("pt_BR", "en", "es", "fr", "de"):
|
| 120 |
+
sub = [(f, c) for f, c, i in frases if i == idi]
|
| 121 |
+
print(f"{idi} NB {sum(nb.classificar(f)[0] == c for f, c in sub)}/{len(sub)} "
|
| 122 |
+
f"Murph {sum(murph.classificar(f)[0] == c for f, c in sub)}/{len(sub)}", end=" · ")
|
| 123 |
+
print("\n\nErros da Murph sozinha:")
|
| 124 |
+
for f, c, i in frases:
|
| 125 |
+
r, p = murph.classificar(f)
|
| 126 |
+
if r != c:
|
| 127 |
+
print(f" [{i}] {f} | esperado {c} | murph {r} ({p:.2f}) | NB {nb.classificar(f)[0]}")
|
app/murph/treinar_murph.py
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Treina a Murph ajudante e exporta pra murph.json.
|
| 2 |
+
|
| 3 |
+
python3 murph/treinar_murph.py # treina com tudo e salva
|
| 4 |
+
python3 murph/treinar_murph.py --cv # só validação cruzada (escolha do C)
|
| 5 |
+
"""
|
| 6 |
+
import json
|
| 7 |
+
import math
|
| 8 |
+
import os
|
| 9 |
+
import sys
|
| 10 |
+
|
| 11 |
+
import numpy as np
|
| 12 |
+
from sklearn.feature_extraction import DictVectorizer
|
| 13 |
+
from sklearn.linear_model import LogisticRegression
|
| 14 |
+
from sklearn.model_selection import StratifiedKFold
|
| 15 |
+
|
| 16 |
+
AQUI = os.path.dirname(os.path.abspath(__file__))
|
| 17 |
+
sys.path.insert(0, AQUI)
|
| 18 |
+
from dados import treino, TAREFAS # noqa: E402
|
| 19 |
+
sys.path.insert(0, os.path.dirname(AQUI))
|
| 20 |
+
import tars_murph as mm # noqa: E402
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def amostras():
|
| 24 |
+
ger = [(f, c) for f, c, _ in json.load(open(os.path.join(AQUI, "gerado_limpo.json"), encoding="utf-8"))]
|
| 25 |
+
return treino() + ger
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def treinar(dados, C):
|
| 29 |
+
textos = [f for f, _ in dados]
|
| 30 |
+
y = np.array([TAREFAS.index(c) for _, c in dados])
|
| 31 |
+
cont = [mm.contagens(t) for t in textos]
|
| 32 |
+
n = len(cont)
|
| 33 |
+
df = {}
|
| 34 |
+
for f in cont:
|
| 35 |
+
for k in f:
|
| 36 |
+
df[k] = df.get(k, 0) + 1
|
| 37 |
+
idf = {k: math.log((1 + n) / (1 + d)) + 1.0 for k, d in df.items()}
|
| 38 |
+
vetores = [mm.vetor(t, idf) for t in textos]
|
| 39 |
+
dv = DictVectorizer()
|
| 40 |
+
X = dv.fit_transform(vetores)
|
| 41 |
+
clf = LogisticRegression(C=C, max_iter=5000)
|
| 42 |
+
clf.fit(X, y)
|
| 43 |
+
nomes = dv.get_feature_names_out()
|
| 44 |
+
W = clf.coef_.T # (n_feats, n_tarefas)
|
| 45 |
+
pesos = {}
|
| 46 |
+
for k, linha in zip(nomes, W):
|
| 47 |
+
if np.abs(linha).max() >= 1e-3:
|
| 48 |
+
pesos[k] = [round(float(x), 4) for x in linha]
|
| 49 |
+
idf = {k: round(v, 4) for k, v in idf.items() if k in pesos}
|
| 50 |
+
return mm.Murph({"tarefas": TAREFAS, "idf": idf, "vies": [float(b) for b in clf.intercept_], "pesos": pesos})
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def fora_da_dobra(dados, C, dobras=5):
|
| 54 |
+
"""(folga p1-p2, acertou, cobertura) de cada frase, prevista por um
|
| 55 |
+
modelo que não a viu."""
|
| 56 |
+
y = np.array([c for _, c in dados])
|
| 57 |
+
res = []
|
| 58 |
+
for tr, te in StratifiedKFold(dobras, shuffle=True, random_state=0).split(dados, y):
|
| 59 |
+
m = treinar([dados[i] for i in tr], C)
|
| 60 |
+
for i in te:
|
| 61 |
+
p = m.probabilidades(dados[i][0])
|
| 62 |
+
res.append((p[0][0] - p[1][0], p[0][1] == dados[i][1], mm.cobertura(dados[i][0], m.idf)))
|
| 63 |
+
return res
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
def calibrar(res, alvo=0.98):
|
| 67 |
+
"""Menor folga com que a Murph ainda acerta >= alvo. Confiante, ela decide
|
| 68 |
+
SOZINHA (pula embeddings e ajudante): por isso a régua é alta (98%)."""
|
| 69 |
+
res = sorted(res, reverse=True)
|
| 70 |
+
escolhida, acertos = 1.0, 0
|
| 71 |
+
for n, (folga, ok) in enumerate(res, 1):
|
| 72 |
+
acertos += ok
|
| 73 |
+
if acertos / n >= alvo:
|
| 74 |
+
escolhida = folga
|
| 75 |
+
return max(0.05, escolhida), sum(ok for _, ok in res) / len(res)
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
def cv(dados, C, dobras=5):
|
| 79 |
+
y = np.array([c for _, c in dados])
|
| 80 |
+
acc = []
|
| 81 |
+
for tr, te in StratifiedKFold(dobras, shuffle=True, random_state=0).split(dados, y):
|
| 82 |
+
m = treinar([dados[i] for i in tr], C)
|
| 83 |
+
acc.append(np.mean([m.classificar(dados[i][0])[0] == dados[i][1] for i in te]))
|
| 84 |
+
return np.mean(acc), np.std(acc)
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
if __name__ == "__main__":
|
| 88 |
+
dados = amostras()
|
| 89 |
+
if "--cv" in sys.argv:
|
| 90 |
+
for C in (5, 10, 20, 50):
|
| 91 |
+
m, s = cv(dados, C)
|
| 92 |
+
print(f"C={C:<3} CV {100 * m:.1f}% ± {100 * s:.1f}", flush=True)
|
| 93 |
+
else:
|
| 94 |
+
C = float(os.environ.get("MURPH_C", 20))
|
| 95 |
+
res = fora_da_dobra(dados, C)
|
| 96 |
+
limite, precisao = calibrar([(f, ok) for f, ok, _ in res])
|
| 97 |
+
# 98% das frases que ela nunca viu têm pelo menos esta cobertura;
|
| 98 |
+
# abaixo disso o pedido não se parece com nada do treino.
|
| 99 |
+
cobertura_minima = float(np.percentile([cob for _, _, cob in res], 2))
|
| 100 |
+
print(f"validação cruzada: {100 * precisao:.1f}%, folga 'confiante' >= {limite:.3f}, "
|
| 101 |
+
f"cobertura mínima {cobertura_minima:.2f}")
|
| 102 |
+
m = treinar(dados, C)
|
| 103 |
+
saida = mm.CAMINHO_PADRAO
|
| 104 |
+
with open(saida, "w", encoding="utf-8") as f:
|
| 105 |
+
json.dump({"formato": mm.VERSAO_FORMATO, "versao": mm.VERSAO, "tarefas": m.tarefas, "idf": m.idf, "vies": m.vies,
|
| 106 |
+
"pesos": m.pesos,
|
| 107 |
+
"limite": round(limite, 4), "cobertura_minima": round(cobertura_minima, 4), "precisao_cv": round(precisao, 4), "frases": len(dados)}, f, ensure_ascii=False, separators=(",", ":"))
|
| 108 |
+
print(f"{len(dados)} frases, {len(m.pesos)} características, {os.path.getsize(saida) / 1e6:.1f} MB -> {saida}")
|