voice-admissions-agent / cli_demo.py
xvious5
feat: training scripts, edge-tts, Gradio TTS choice, NLP warmup
c478197
"""Text-only demo (no Gradio): agent reply on stdout; use -v for diagnostics on stderr."""
from __future__ import annotations
import argparse
import logging
import sys
from voice_agent.pipeline import run_text_turn
from voice_agent.tts_module import speak_local
logger = logging.getLogger(__name__)
def main() -> None:
p = argparse.ArgumentParser(description="Admissions assistant — typed input, STT skipped.")
p.add_argument("question", nargs="*", help="Question (or pass via stdin)")
p.add_argument(
"-v",
"--verbose",
action="store_true",
help="INFO logging and transcript / confidence / similarity on stderr",
)
p.add_argument("--speak", action="store_true", help="Also play TTS on local speakers (pyttsx3)")
args = p.parse_args()
logging.basicConfig(
level=logging.INFO if args.verbose else logging.WARNING,
format="%(levelname)s:%(name)s:%(message)s",
force=True,
)
text = " ".join(args.question).strip()
if not text:
text = input("Your question: ").strip()
try:
r = run_text_turn(text)
except Exception as e:
logger.exception("Pipeline raised unexpectedly")
print(e, file=sys.stderr)
sys.exit(1)
if not r.ok:
print(r.error or "Unknown failure", file=sys.stderr)
sys.exit(1)
if args.verbose:
print("transcript:", r.transcript, file=sys.stderr)
print("confidence:", r.confidence, file=sys.stderr)
if r.similarity is not None:
print("similarity:", round(r.similarity, 4), file=sys.stderr)
print(r.agent_text)
if args.speak and r.agent_text:
try:
speak_local(r.agent_text)
except Exception as e:
print("TTS playback failed:", e, file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()