Download src/predict_robotics.py from rasitcesur/Manufacturing-MoE: direct link, hf CLI and curl.
- Browser
- Download file 3.43 kB
-
https://huggingface.co/rasitcesur/Manufacturing-MoE/resolve/main/src/predict_robotics.py
- Command line
-
hf download hf://rasitcesur/Manufacturing-MoE/src/predict_robotics.py
-
curl -L -o predict_robotics.py https://huggingface.co/rasitcesur/Manufacturing-MoE/resolve/main/src/predict_robotics.py
3.43 kB
| """Manufacturing-MoE current robotics: inference with observable pre-target history.""" | |
| import argparse,json,sys | |
| from pathlib import Path | |
| import numpy as np,torch | |
| from robotics_calibrated import RoboticsMoECalibrated,PreparedCalibrated,prediction | |
| ROOT=Path(__file__).resolve().parents[1] | |
| sys.path.insert(0,str(ROOT/'runtime')) | |
| from robot_physics import simulate | |
| from robot_features import public_features | |
| from gravity_features import signed_features | |
| PRIVATE_DEFAULTS={'private_motor_efficiency':1.,'private_driver_loss':1.,'private_friction_scale':1.,'private_settle_s':0.,'private_regen_scale':1.} | |
| def robot_predict(checkpoint,robot,motion,history_probes=None,past_calibration=None): | |
| if history_probes is None:history_probes=robot.get('history_probes') | |
| if past_calibration is None:past_calibration=robot.get('past_calibration') | |
| if history_probes is None or past_calibration is None: | |
| raise ValueError('Calibrated robotics model requires seven previous power/settle observations and six independently measured calibration cycles (24 values).') | |
| h=np.asarray(history_probes,np.float32) | |
| hc=np.asarray(past_calibration,np.float32) | |
| if h.shape!=(7,) or hc.shape!=(24,) or not np.isfinite(h).all() or not np.isfinite(hc).all(): | |
| raise ValueError('History observations must be finite and of length 7 and 24, respectively.') | |
| state=torch.load(checkpoint,map_location='cpu',weights_only=False) | |
| s=state.get('robotics_bundle',state) | |
| if s['model_type']!='RoboticsMoECalibrated':raise ValueError('Checkpoint does not contain calibrated robotics model.') | |
| model=RoboticsMoECalibrated();model.load_state_dict(s['robotics']);model.eval() | |
| cfg={**robot,**PRIVATE_DEFAULTS} | |
| out=simulate(cfg,motion,steps=22) | |
| joint,mask,global_x=public_features(cfg,motion,out) | |
| signed_joint,signed_global=signed_features(cfg,motion) | |
| d={'joint':joint[None],'mask':mask[None],'global_features':global_x[None], | |
| 'joint_gravity':signed_joint[None],'global_gravity':signed_global[None], | |
| 'history':h[None],'history_calibration':hc[None], | |
| 'prior':np.array([[out['nominal_time_s'],out['nominal_energy_Wh']]],np.float32), | |
| 'y':np.ones((1,2),np.float32),'n_axes':np.array([robot['n']]), | |
| 'topology':np.array([robot['topology']]),'robot_ids':np.array([robot.get('robot_id','inference')])} | |
| scaler=s['train_normalizer'];ds=PreparedCalibrated(d,scaler['mean'],scaler['std']) | |
| pred=prediction(model,ds)[0] | |
| return {'model_family':'robotics','joint_count':robot['n'],'topology':robot['topology'], | |
| 'predicted_cycle_time_s':float(pred[0]),'predicted_electricity_Wh':float(pred[1]), | |
| 'material_removed_g':0.,'history_calibration_cycles':6, | |
| 'signed_gravity_features':True,'simulator_nominal_energy_Wh':out['nominal_energy_Wh'], | |
| 'not_a_real_machine_validated_model':True} | |
| if __name__=='__main__': | |
| pa=argparse.ArgumentParser() | |
| pa.add_argument('--checkpoint',default='reports/v51/model.pt');pa.add_argument('--robot',required=True) | |
| pa.add_argument('--motion',required=True);pa.add_argument('--output',default='outputs/robotics_v51_prediction.json') | |
| a=pa.parse_args() | |
| r=json.loads(Path(a.robot).read_text());mo=json.loads(Path(a.motion).read_text()) | |
| pred=robot_predict(a.checkpoint,r,mo) | |
| o=Path(a.output);o.parent.mkdir(parents=True,exist_ok=True);o.write_text(json.dumps(pred,indent=2)) | |
| print(json.dumps(pred,indent=2)) | |