def test_ontology(): kb = KnowledgeBase() ontology = { "ontology": { "season": [ "fall", "spring", "summer", "winter" ], "month": [ "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december" ] } } kb.load_json(ontology) df = DialogueFlow(States.A, Speaker.USER, kb=kb) df.add_state(States.A) df.add_state(States.B) df.add_state(States.C) df.add_state(States.D) df.add_state(States.E) df.set_error_successor(States.A, States.E) df.set_error_successor(States.B, States.E) df.set_error_successor(States.C, States.E) df.set_error_successor(States.D, States.E) df.add_user_transition(States.A, States.B, "[#ONT(month)]") df.add_system_transition(States.B, States.C, "B to C") df.add_user_transition(States.C, States.D, "[$m=#ONT(month), $s=#ONT(season)]") df.user_turn("january") assert df.state() == States.B assert df.system_turn() == "B to C" df.user_turn("october is in the fall season") assert df.state() == States.D assert df._vars["m"] == "october" assert df._vars["s"] == "fall" df.set_state(States.A) df.set_speaker(Speaker.USER) df.user_turn("hello there", debugging=False) assert df.state() == States.E
def test_information_state_based_dialogue(): df = DialogueFlow("root", initial_speaker=Speaker.USER) df.add_user_transition("root", "one", "$x=[{cat, dog}]") df.set_error_successor("root", "one") df.add_system_transition("one", "root", "i am a stupid state machine") df.add_update_rule("[$x={ice cream, candy}]") df.add_update_rule("#ANY($x=candy)", "$y=blah") df.add_update_rule("#ANY($x=ice cream)", "$y=None") df.add_update_rule("#ANY($y=blah)", "i am a smart info state manager (2.0)") df.user_turn("candy", debugging=True) assert df.system_turn().strip() == "i am a smart info state manager" df.user_turn("ice cream", debugging=True) assert df.system_turn(debugging=True).strip() == "i am a stupid state machine" df.user_turn("ice cream", debugging=True) assert df.system_turn(debugging=True).strip() == "i am a stupid state machine" df.user_turn("ice cream", debugging=True) assert df.system_turn(debugging=True).strip() == "i am a stupid state machine" df.user_turn("ice cream", debugging=True) assert df.system_turn(debugging=True).strip() == "i am a stupid state machine"
def test_information_state_based_dialogue(): df = DialogueFlow('root', initial_speaker=Speaker.USER) df.add_user_transition('root', 'one', '$x=[{cat, dog}]') df.set_error_successor('root', 'one') df.add_system_transition('one', 'root', 'i am a stupid state machine') df.add_update_rule('[$x={ice cream, candy}]') df.add_update_rule('#ANY($x=candy)', '$y=blah') df.add_update_rule('#ANY($x=ice cream)', '$y=None') df.add_update_rule('#ANY($y=blah)', 'i am a smart info state manager (2.0)') df.user_turn('candy', debugging=True) assert df.system_turn().strip() == 'i am a smart info state manager' df.user_turn('ice cream', debugging=True) assert df.system_turn(debugging=True).strip() == 'i am a stupid state machine' df.user_turn('ice cream', debugging=True) assert df.system_turn(debugging=True).strip() == 'i am a stupid state machine' df.user_turn('ice cream', debugging=True) assert df.system_turn(debugging=True).strip() == 'i am a stupid state machine' df.user_turn('ice cream', debugging=True) assert df.system_turn(debugging=True).strip() == 'i am a stupid state machine'