add functional
add streaming
add history