enhance model
add serialization
add more apis