"""Persistent local inference API, without a game UI, trainer or external model calls.""" import argparse,json,time from http.server import HTTPServer,BaseHTTPRequestHandler from pathlib import Path from urllib.parse import urlsplit from predictor import DecisionPredictor,unique_object,reject_nonfinite from schema import validate_request ROOT=Path(__file__).resolve().parents[1] def make_handler(engine): class Handler(BaseHTTPRequestHandler): def reply(self,status,data): raw=json.dumps(data,ensure_ascii=False,allow_nan=False).encode() self.send_response(status);self.send_header('Content-Type','application/json; charset=utf-8') self.send_header('Content-Length',str(len(raw)));self.send_header('Cache-Control','no-store') self.end_headers();self.wfile.write(raw) def do_GET(self): if urlsplit(self.path).path in ['/', '/api/health']: self.reply(200,{'service':'NanoJev-Web','version':'1.0.0-web','ready':True,'model':'browser-head-v5','device':str(engine.device),'precision':engine.precision,'provider_calls':0}) else:self.reply(404,{'error':'Not found'}) def do_POST(self): if urlsplit(self.path).path!='/api/evaluate':return self.reply(404,{'error':'Not found'}) try: n=int(self.headers.get('Content-Length',0)) if not 0