import argparse import json from pathlib import Path from guidance_sidecar import GuidanceEngine, GuidanceSettings def main() -> None: parser = argparse.ArgumentParser(description="Local Hugging Face coding guidance sidecar") subparsers = parser.add_subparsers(dest="command", required=True) guide_parser = subparsers.add_parser("guide", help="Ask the local guidance model for structured coding help") guide_parser.add_argument("--task", required=True) guide_parser.add_argument("--context", default="") guide_parser.add_argument("--project", action="store_true") guide_parser.add_argument("--root", default=".") guide_parser.add_argument("--model", default=None) guide_parser.add_argument("--adapter", default=None) guide_parser.add_argument("--bundle", default=None, help="Path to an HF bundle containing base_model/") guide_parser.add_argument("--keep-loaded-seconds", type=int, default=None) guide_parser.add_argument("--no-cache", action="store_true") smoke_parser = subparsers.add_parser("smoke", help="Run one guidance request and save JSON result") smoke_parser.add_argument("--task", default="Add input validation and tests for a Python function without changing public API.") smoke_parser.add_argument("--output", default="./runtime/guidance_smoke_result.json") args = parser.parse_args() if args.command == "guide": if args.bundle: engine = GuidanceEngine.from_bundle(args.bundle) else: engine = GuidanceEngine( model_name=args.model, adapter_dir=args.adapter, keep_loaded_seconds=args.keep_loaded_seconds, ) result = ( engine.advise_project(args.task, root=args.root, use_cache=not args.no_cache) if args.project else engine.advise(args.task, args.context, use_cache=not args.no_cache) ) print(json.dumps(result, indent=2)) elif args.command == "smoke": engine = GuidanceEngine(GuidanceSettings(max_new_tokens=384)) result = engine.advise_project(args.task) output = Path(args.output) output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps(result, indent=2), encoding="utf-8") print(json.dumps(result, indent=2)) if __name__ == "__main__": main()