import argparse import random import sys import time from .export import run_export from .generator import random_command, render from .llm import llm_command def main() -> None: raw = sys.argv[1:] if raw and raw[0] == "export": run_export(raw[1:]) return _run_session() def _run_session() -> None: parser = argparse.ArgumentParser( description="ipin-vr: generator poleceń do terapii afazji" ) parser.add_argument("--level", type=int, choices=[1, 2, 3], default=1, metavar="{1,2,3}", help="poziom trudności (domyślnie: 1)") parser.add_argument("--count", type=int, default=5, metavar="N", help="liczba poleceń (domyślnie: 5)") parser.add_argument("--delay", type=float, default=4.0, metavar="S", help="pauza między poleceniami w sekundach (domyślnie: 4.0)") parser.add_argument("--voice", metavar="PATH", help="ścieżka do modelu Piper .onnx") parser.add_argument("--no-audio", action="store_true", help="wyłącza TTS") parser.add_argument("--llm", action="store_true", help="użyj LLM do wyboru poleceń") parser.add_argument("--llm-endpoint", default="http://localhost:8080/v1/chat/completions", metavar="URL", help="endpoint llama.cpp") parser.add_argument("--llm-model", default="local", metavar="NAME", help="nazwa modelu") parser.add_argument("--seed", type=int, metavar="N", help="deterministyczny generator losowy") args = parser.parse_args(sys.argv[1:]) if args.seed is not None: random.seed(args.seed) use_audio = (not args.no_audio) and (args.voice is not None) for i in range(1, args.count + 1): if args.llm: cmd = llm_command(args.level, args.llm_endpoint, args.llm_model) else: cmd = random_command(args.level) text = render(cmd) print(f"{i}. {text}") if use_audio: from .tts import speak speak(text, args.voice) if i < args.count: time.sleep(args.delay)