Update conversation_logic.py
Browse files- conversation_logic.py +40 -7
conversation_logic.py
CHANGED
|
@@ -653,13 +653,36 @@ class ConversationEngine:
|
|
| 653 |
verbosity=verbosity,
|
| 654 |
)
|
| 655 |
|
| 656 |
-
# Merge solver result into base result
|
| 657 |
if solver_result is not None:
|
| 658 |
-
result = solver_result
|
| 659 |
-
result.domain = "quant"
|
| 660 |
result.meta = result.meta or {}
|
| 661 |
-
|
| 662 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 663 |
else:
|
| 664 |
result.meta = result.meta or {}
|
| 665 |
result.topic = question_topic if is_quant else result.topic
|
|
@@ -669,6 +692,7 @@ class ConversationEngine:
|
|
| 669 |
solver_has_steps = bool(solver_steps)
|
| 670 |
prefer_question_support = _should_prefer_question_support(resolved_help_mode, fallback_pack)
|
| 671 |
direct_solve_request = _is_direct_solve_request(user_text or solver_input, resolved_intent)
|
|
|
|
| 672 |
|
| 673 |
result.help_mode = resolved_help_mode
|
| 674 |
result.meta = result.meta or {}
|
|
@@ -727,7 +751,11 @@ class ConversationEngine:
|
|
| 727 |
hint_stage=hint_stage,
|
| 728 |
topic=result.topic,
|
| 729 |
)
|
| 730 |
-
elif
|
|
|
|
|
|
|
|
|
|
|
|
|
| 731 |
reply_core = _answer_path_from_steps(solver_steps, verbosity=verbosity)
|
| 732 |
result.meta["response_source"] = "solver_steps"
|
| 733 |
result.meta["question_support_used"] = False
|
|
@@ -740,7 +768,12 @@ class ConversationEngine:
|
|
| 740 |
hint_stage=hint_stage,
|
| 741 |
topic=result.topic,
|
| 742 |
)
|
| 743 |
-
elif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 744 |
reply_core = _answer_path_from_steps(solver_steps, verbosity=verbosity)
|
| 745 |
result.meta["response_source"] = "solver_steps"
|
| 746 |
result.meta["question_support_used"] = False
|
|
|
|
| 653 |
verbosity=verbosity,
|
| 654 |
)
|
| 655 |
|
| 656 |
+
# Merge solver result into base result only if it agrees with the classified topic.
|
| 657 |
if solver_result is not None:
|
|
|
|
|
|
|
| 658 |
result.meta = result.meta or {}
|
| 659 |
+
solver_topic = getattr(solver_result, "topic", None) or "unknown"
|
| 660 |
+
|
| 661 |
+
compatible_topics = {
|
| 662 |
+
question_topic,
|
| 663 |
+
"general_quant",
|
| 664 |
+
"general",
|
| 665 |
+
"unknown",
|
| 666 |
+
}
|
| 667 |
+
|
| 668 |
+
# allow a few sensible cross-matches
|
| 669 |
+
if question_topic == "algebra":
|
| 670 |
+
compatible_topics.update({"ratio"})
|
| 671 |
+
elif question_topic == "ratio":
|
| 672 |
+
compatible_topics.update({"algebra"})
|
| 673 |
+
elif question_topic == "percent":
|
| 674 |
+
compatible_topics.update({"ratio", "algebra"})
|
| 675 |
+
|
| 676 |
+
if solver_topic in compatible_topics:
|
| 677 |
+
result = solver_result
|
| 678 |
+
result.domain = "quant"
|
| 679 |
+
result.meta = result.meta or {}
|
| 680 |
+
result.topic = question_topic if question_topic else solver_topic
|
| 681 |
+
result.meta["solver_topic_accepted"] = solver_topic
|
| 682 |
+
else:
|
| 683 |
+
result.meta["solver_topic_rejected"] = solver_topic
|
| 684 |
+
result.meta["solver_topic_expected"] = question_topic
|
| 685 |
+
result.topic = question_topic if is_quant else result.topic
|
| 686 |
else:
|
| 687 |
result.meta = result.meta or {}
|
| 688 |
result.topic = question_topic if is_quant else result.topic
|
|
|
|
| 692 |
solver_has_steps = bool(solver_steps)
|
| 693 |
prefer_question_support = _should_prefer_question_support(resolved_help_mode, fallback_pack)
|
| 694 |
direct_solve_request = _is_direct_solve_request(user_text or solver_input, resolved_intent)
|
| 695 |
+
solver_topic_ok = result.meta.get("solver_topic_rejected") is None
|
| 696 |
|
| 697 |
result.help_mode = resolved_help_mode
|
| 698 |
result.meta = result.meta or {}
|
|
|
|
| 751 |
hint_stage=hint_stage,
|
| 752 |
topic=result.topic,
|
| 753 |
)
|
| 754 |
+
elif (
|
| 755 |
+
resolved_help_mode == "answer"
|
| 756 |
+
and solver_has_steps
|
| 757 |
+
and result.meta.get("solver_topic_rejected") is None
|
| 758 |
+
):
|
| 759 |
reply_core = _answer_path_from_steps(solver_steps, verbosity=verbosity)
|
| 760 |
result.meta["response_source"] = "solver_steps"
|
| 761 |
result.meta["question_support_used"] = False
|
|
|
|
| 768 |
hint_stage=hint_stage,
|
| 769 |
topic=result.topic,
|
| 770 |
)
|
| 771 |
+
elif (
|
| 772 |
+
resolved_help_mode == "walkthrough"
|
| 773 |
+
and solver_has_steps
|
| 774 |
+
and not prefer_question_support
|
| 775 |
+
and result.meta.get("solver_topic_rejected") is None
|
| 776 |
+
):
|
| 777 |
reply_core = _answer_path_from_steps(solver_steps, verbosity=verbosity)
|
| 778 |
result.meta["response_source"] = "solver_steps"
|
| 779 |
result.meta["question_support_used"] = False
|