File size: 1,593 Bytes
1209c2f 5adf069 1209c2f 5adf069 1209c2f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | """Fev-4B CLI. Loading and inference use local files only."""
import argparse
import json
import sys
from pathlib import Path
from fev4b import Fev4B, verify_package
def main():
parser = argparse.ArgumentParser(description='Run the packaged Fev-4B decision model')
parser.add_argument('--model-dir', type=Path, default=Path(__file__).resolve().parent)
parser.add_argument('--input', type=Path, help='JSON containing request and unknownKey; default: stdin')
parser.add_argument('--device', default='cuda:0')
parser.add_argument('--execution', choices=('reference', 'compiled'), default='reference')
parser.add_argument('--adaptation-dir', type=Path)
parser.add_argument('--verify-only', action='store_true', help='Verify all hashes without importing PyTorch')
args = parser.parse_args()
if args.verify_only:
print(json.dumps(verify_package(args.model_dir), ensure_ascii=False))
return
payload = json.loads(args.input.read_text() if args.input else sys.stdin.read())
if not isinstance(payload, dict) or set(payload) != {'request', 'unknownKey'}:
raise ValueError('Expected exactly request and unknownKey')
model = Fev4B(args.model_dir, device=args.device, execution=args.execution,
adaptation_dir=args.adaptation_dir)
result = model.route(payload['request'], unknown_key=payload['unknownKey'])
# Raw native evidence is available through the Python interface for debugging.
result.pop('native')
print(json.dumps(result, ensure_ascii=False, indent=2))
if __name__ == '__main__': main()
|