Download app/tests/test_escolha_camadas.py from OpenTARS/openTARS: direct link, hf CLI and curl.
- Browser
- Download file 2.59 kB
-
https://huggingface.co/OpenTARS/openTARS/resolve/main/app/tests/test_escolha_camadas.py
- Command line
-
hf download hf://OpenTARS/openTARS/app/tests/test_escolha_camadas.py
-
curl -L -o test_escolha_camadas.py https://huggingface.co/OpenTARS/openTARS/resolve/main/app/tests/test_escolha_camadas.py
2.59 kB
| """2.9: escolha da tarefa em camadas (tars_escolha.py + decidir_tarefa).""" | |
| import os | |
| import time | |
| os.environ["TARS_IDIOMA"] = "pt_BR" | |
| from _util import carregar_tars # noqa: E402 | |
| tars = carregar_tars() | |
| tars.listar_modelos_instalados = lambda forcar=False: {"qwen3:8b"} | |
| tars.desktop_entries = lambda forcar=False: [{"nome": "Spotify"}, {"nome": "GIMP"}, {"nome": "Files"}] | |
| tars._cache_desktop["ts"] = time.time() | |
| def decidir(texto): | |
| return tars.decidir_tarefa(texto) | |
| # 1. Palavra-chave sem nada contra: decide na hora | |
| d = decidir("feche o firefox agora mesmo") | |
| # (a Murph, que é instantânea, costuma concordar: "palavras+local") | |
| assert d.categoria == "acao" and d.via in ("palavras", "palavras+local"), d | |
| print("OK: palavra-chave clara decide sozinha") | |
| # 2. Contexto: "de novo" logo depois de uma ação | |
| tars.lembrar_tarefa("acao") | |
| d = decidir("de novo") | |
| assert d.categoria == "acao" and "contexto" in d.via, d | |
| tars._ultima_tarefa["ts"] = time.time() - 3600 | |
| d = decidir("de novo") | |
| assert d.categoria == "simples", d | |
| print("OK: continuação curta ('de novo') herda a tarefa anterior (por 5 minutos)") | |
| # 3. Estrutura: traceback é código, mesmo sem palavra-chave | |
| d = decidir('Traceback (most recent call last):\n File "a.py", line 3\nNameError: x') | |
| assert d.categoria == "codigo" and "estrutura" in d.via, d | |
| d = decidir("E: Unable to locate package foo quando rodo sudo apt install foo") | |
| assert d.categoria == "tecnico", d | |
| print("OK: traceback -> código; 'E: ... sudo apt' -> técnico (pelo formato)") | |
| # Daqui pra baixo, a Murph fica de fora pra não mudar as contas (ela é | |
| # testada em test_murph.py). Endurance Neo: sem embeddings e sem ajudante. | |
| tars._votos_modelo_local = lambda texto, votos, so_duvida=False: None | |
| # 4. App instalado citado soma voto de ação | |
| d = decidir("spotify pausa essa música aí") | |
| assert d.categoria == "acao" and d.votos.get("acao", 0) > 0, d | |
| print("OK: citar um app instalado (Spotify) puxa pra ação") | |
| # 5. Sem acordo claro: a mais votada; sem voto nenhum, pelo tamanho do pedido | |
| assert decidir("hmm talvez quem sabe aquilo lá").categoria == "simples" | |
| assert decidir("o que você acha de viajar pra praia ou pra montanha nas férias").categoria == "geral" | |
| print("OK: sem acordo, segue pelos votos e pelo tamanho do pedido") | |
| # 6. Nenhuma camada chama IA (Endurance Neo) | |
| for nome in ("_classificar_com_ia", "_votos_embedding", "saude_ajudante", "embeddings", "classificador_local"): | |
| assert not hasattr(tars, nome), nome | |
| print("OK: a escolha da tarefa não usa mais IA nenhuma (sem ajudante, sem embeddings)") | |
| print("\nTUDO OK.") | |