From b0e057e760ccadf99cffd0cd534625384e86f2e8 Mon Sep 17 00:00:00 2001 From: Arnav Singhvi Date: Sun, 6 Oct 2024 17:30:45 -0700 Subject: [PATCH 1/2] updated assertions error msg to specify target_module --- docs/api/assertions.md | 4 ++++ docs/docs/building-blocks/7-assertions.md | 4 ++++ docs/docs/deep-dive/modules/assertions.mdx | 4 ++++ dspy/primitives/assertions.py | 2 +- examples/qa/hotpot/hotpotqa_with_assertions.ipynb | 2 ++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/api/assertions.md b/docs/api/assertions.md index 07dfa55f4c..edb25013a8 100644 --- a/docs/api/assertions.md +++ b/docs/api/assertions.md @@ -101,12 +101,14 @@ We can declare these validation checks through `dspy.Suggest` statements (as we dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) ``` @@ -133,12 +135,14 @@ class SimplifiedBaleenAssertions(dspy.Module): dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) prev_queries.append(query) diff --git a/docs/docs/building-blocks/7-assertions.md b/docs/docs/building-blocks/7-assertions.md index ae6a49859c..4b0297f6b2 100644 --- a/docs/docs/building-blocks/7-assertions.md +++ b/docs/docs/building-blocks/7-assertions.md @@ -99,12 +99,14 @@ We can declare these validation checks through `dspy.Suggest` statements (as we dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) ``` @@ -131,12 +133,14 @@ class SimplifiedBaleenAssertions(dspy.Module): dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) prev_queries.append(query) diff --git a/docs/docs/deep-dive/modules/assertions.mdx b/docs/docs/deep-dive/modules/assertions.mdx index 93fac43a07..acda69af42 100644 --- a/docs/docs/deep-dive/modules/assertions.mdx +++ b/docs/docs/deep-dive/modules/assertions.mdx @@ -104,12 +104,14 @@ We can declare these validation checks through `dspy.Suggest` statements (as we dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) ``` @@ -136,12 +138,14 @@ class SimplifiedBaleenAssertions(dspy.Module): dspy.Suggest( len(query) <= 100, "Query should be short and less than 100 characters", + target_module=self.generate_query ) dspy.Suggest( validate_query_distinction_local(prev_queries, query), "Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)), + target_module=self.generate_query ) prev_queries.append(query) diff --git a/dspy/primitives/assertions.py b/dspy/primitives/assertions.py index 3f2b6166cb..5c8d04ef5d 100644 --- a/dspy/primitives/assertions.py +++ b/dspy/primitives/assertions.py @@ -248,7 +248,7 @@ def wrapper(*args, **kwargs): dspy.settings.backtrack_to = dsp.settings.trace[-1][0] if dspy.settings.backtrack_to is None: - dspy.logger.error("Specified module not found in trace") + dspy.logger.error("Module not found in trace. If passing a DSPy Signature, please specify the intended module for the assertion (e.g., use `dspy.ChainOfThought(GenerateAnswer)` instead of `GenerateAnswer`).") # save unique feedback message for predictor if error_msg not in dspy.settings.predictor_feedbacks.setdefault( diff --git a/examples/qa/hotpot/hotpotqa_with_assertions.ipynb b/examples/qa/hotpot/hotpotqa_with_assertions.ipynb index 8bf62b6c4e..2771526063 100644 --- a/examples/qa/hotpot/hotpotqa_with_assertions.ipynb +++ b/examples/qa/hotpot/hotpotqa_with_assertions.ipynb @@ -193,12 +193,14 @@ " dspy.Suggest(\n", " len(query) <= 100,\n", " \"Query should be short and less than 100 characters\",\n", + " target_module=self.generate_query\n", " )\n", "\n", " dspy.Suggest(\n", " validate_query_distinction_local(prev_queries, query),\n", " \"Query should be distinct from: \"\n", " + \"; \".join(f\"{i+1}) {q}\" for i, q in enumerate(prev_queries)),\n", + " target_module=self.generate_query\n", " )\n", "\n", " prev_queries.append(query)\n", From 57cb297146fc488d0e176eb694dab3cb15b1f345 Mon Sep 17 00:00:00 2001 From: arnavsinghvi11 <54859892+arnavsinghvi11@users.noreply.github.com> Date: Sun, 6 Oct 2024 18:47:52 -0700 Subject: [PATCH 2/2] Update assertions.py error msg --- dspy/primitives/assertions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dspy/primitives/assertions.py b/dspy/primitives/assertions.py index 5c8d04ef5d..4ddea6760e 100644 --- a/dspy/primitives/assertions.py +++ b/dspy/primitives/assertions.py @@ -248,7 +248,7 @@ def wrapper(*args, **kwargs): dspy.settings.backtrack_to = dsp.settings.trace[-1][0] if dspy.settings.backtrack_to is None: - dspy.logger.error("Module not found in trace. If passing a DSPy Signature, please specify the intended module for the assertion (e.g., use `dspy.ChainOfThought(GenerateAnswer)` instead of `GenerateAnswer`).") + dspy.logger.error("Module not found in trace. If passing a DSPy Signature, please specify the intended module for the assertion (e.g., use `target_module = self.my_module(my_signature)` instead of `target_module = my_signature`).") # save unique feedback message for predictor if error_msg not in dspy.settings.predictor_feedbacks.setdefault(