j-js commited on
Commit
dcb4bf3
·
verified ·
1 Parent(s): a1acf11

Update conversation_logic.py

Browse files
Files changed (1) hide show
  1. 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, but do not let it automatically decide the reply.
657
  if solver_result is not None:
658
- result = solver_result
659
- result.domain = "quant"
660
  result.meta = result.meta or {}
661
- if not result.topic or result.topic in {"general_quant", "general", "unknown"}:
662
- result.topic = question_topic
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 resolved_help_mode == "answer" and solver_has_steps:
 
 
 
 
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 resolved_help_mode == "walkthrough" and solver_has_steps and not prefer_question_support:
 
 
 
 
 
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