refactor responses to be numpy arrays and added generate_response