ipin-vr/ipin_vr/cli.py

54 lines
2 KiB
Python
Raw Normal View History

import argparse
import random
import time
from .generator import random_command, render
from .llm import llm_command
def main() -> 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()
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)