ramgovindv's picture
Create cli.py
356d161 verified
"""
Command-line interface for health-function-lm.
Usage
-----
health-fn "Log my blood pressure as 120/80"
health-fn --pretty "What is my resting heart rate?"
echo "Log weight 70kg" | health-fn
"""
import argparse
import json
import sys
from .model import HealthFunctionLM
def main():
parser = argparse.ArgumentParser(
prog="health-fn",
description="Run a health query through the function-calling model.",
)
parser.add_argument(
"query",
nargs="?",
help="Natural-language health query. Reads from stdin if omitted.",
)
parser.add_argument(
"--pretty",
action="store_true",
default=True,
help="Pretty-print JSON output (default: on).",
)
parser.add_argument(
"--repo-id",
default="ramgovindv/health_function_call_llama3.2_3b_gguf",
help="Hugging Face repo ID.",
)
parser.add_argument(
"--filename",
default="Llama-3.2-3B-Instruct.Q4_K_M.gguf",
help="GGUF filename inside the repo.",
)
parser.add_argument(
"--n-ctx", type=int, default=2048, help="Context window size."
)
parser.add_argument(
"--n-threads", type=int, default=4, help="Number of CPU threads."
)
args = parser.parse_args()
query = args.query or sys.stdin.read().strip()
if not query:
parser.error("Provide a query as an argument or via stdin.")
lm = HealthFunctionLM(
repo_id=args.repo_id,
filename=args.filename,
n_ctx=args.n_ctx,
n_threads=args.n_threads,
)
result = lm.query(query)
indent = 2 if args.pretty else None
print(json.dumps(result, indent=indent))
if __name__ == "__main__":
main()