generate product model