Update conversation_logic.py
Browse files- conversation_logic.py +57 -0
conversation_logic.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
from __future__ import annotations
|
| 2 |
|
| 3 |
import re
|
|
@@ -317,6 +318,11 @@ def is_explainer_request(text: str) -> bool:
|
|
| 317 |
"can you explain",
|
| 318 |
"explain how",
|
| 319 |
"explain why",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 320 |
]
|
| 321 |
|
| 322 |
return any(p in t for p in explainer_signals)
|
|
@@ -816,6 +822,48 @@ def _pick_teaching_line(
|
|
| 816 |
return best_line
|
| 817 |
|
| 818 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 819 |
class ConversationEngine:
|
| 820 |
def __init__(
|
| 821 |
self,
|
|
@@ -889,6 +937,8 @@ class ConversationEngine:
|
|
| 889 |
transparency=transparency,
|
| 890 |
)
|
| 891 |
|
|
|
|
|
|
|
| 892 |
result.domain = "quant" if is_quant else "general"
|
| 893 |
result.solved = False
|
| 894 |
result.help_mode = "explain"
|
|
@@ -907,6 +957,13 @@ class ConversationEngine:
|
|
| 907 |
"question_type": question_type,
|
| 908 |
"classified_topic": question_topic,
|
| 909 |
"explainer_used": True,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 910 |
}
|
| 911 |
return result
|
| 912 |
|
|
|
|
| 1 |
+
# conversation_logic.py
|
| 2 |
from __future__ import annotations
|
| 3 |
|
| 4 |
import re
|
|
|
|
| 318 |
"can you explain",
|
| 319 |
"explain how",
|
| 320 |
"explain why",
|
| 321 |
+
"break this down",
|
| 322 |
+
"question breakdown",
|
| 323 |
+
"what should i identify first",
|
| 324 |
+
"what do i do first",
|
| 325 |
+
"what is the first move",
|
| 326 |
]
|
| 327 |
|
| 328 |
return any(p in t for p in explainer_signals)
|
|
|
|
| 822 |
return best_line
|
| 823 |
|
| 824 |
|
| 825 |
+
def _safe_meta_list(items: Any) -> List[str]:
|
| 826 |
+
if not items:
|
| 827 |
+
return []
|
| 828 |
+
if isinstance(items, list):
|
| 829 |
+
return [str(x).strip() for x in items if str(x).strip()]
|
| 830 |
+
if isinstance(items, tuple):
|
| 831 |
+
return [str(x).strip() for x in items if str(x).strip()]
|
| 832 |
+
if isinstance(items, str):
|
| 833 |
+
text = items.strip()
|
| 834 |
+
return [text] if text else []
|
| 835 |
+
return []
|
| 836 |
+
|
| 837 |
+
|
| 838 |
+
def _safe_meta_text(value: Any) -> Optional[str]:
|
| 839 |
+
if value is None:
|
| 840 |
+
return None
|
| 841 |
+
text = str(value).strip()
|
| 842 |
+
return text or None
|
| 843 |
+
|
| 844 |
+
|
| 845 |
+
def _extract_explainer_scaffold(explainer_result: Any) -> Dict[str, Any]:
|
| 846 |
+
scaffold = getattr(explainer_result, "scaffold", None)
|
| 847 |
+
|
| 848 |
+
if scaffold is None:
|
| 849 |
+
return {}
|
| 850 |
+
|
| 851 |
+
return {
|
| 852 |
+
"concept": _safe_meta_text(getattr(scaffold, "concept", None)),
|
| 853 |
+
"ask": _safe_meta_text(getattr(scaffold, "ask", None)),
|
| 854 |
+
"givens": _safe_meta_list(getattr(scaffold, "givens", [])),
|
| 855 |
+
"target": _safe_meta_text(getattr(scaffold, "target", None)),
|
| 856 |
+
"setup_actions": _safe_meta_list(getattr(scaffold, "setup_actions", [])),
|
| 857 |
+
"intermediate_steps": _safe_meta_list(getattr(scaffold, "intermediate_steps", [])),
|
| 858 |
+
"first_move": _safe_meta_text(getattr(scaffold, "first_move", None)),
|
| 859 |
+
"next_hint": _safe_meta_text(getattr(scaffold, "next_hint", None)),
|
| 860 |
+
"common_traps": _safe_meta_list(getattr(scaffold, "common_traps", [])),
|
| 861 |
+
"variables_to_define": _safe_meta_list(getattr(scaffold, "variables_to_define", [])),
|
| 862 |
+
"equations_to_form": _safe_meta_list(getattr(scaffold, "equations_to_form", [])),
|
| 863 |
+
"answer_hidden": bool(getattr(scaffold, "answer_hidden", True)),
|
| 864 |
+
}
|
| 865 |
+
|
| 866 |
+
|
| 867 |
class ConversationEngine:
|
| 868 |
def __init__(
|
| 869 |
self,
|
|
|
|
| 937 |
transparency=transparency,
|
| 938 |
)
|
| 939 |
|
| 940 |
+
scaffold_meta = _extract_explainer_scaffold(explainer_result)
|
| 941 |
+
|
| 942 |
result.domain = "quant" if is_quant else "general"
|
| 943 |
result.solved = False
|
| 944 |
result.help_mode = "explain"
|
|
|
|
| 957 |
"question_type": question_type,
|
| 958 |
"classified_topic": question_topic,
|
| 959 |
"explainer_used": True,
|
| 960 |
+
"bridge_ready": bool(getattr(explainer_result, "meta", {}).get("bridge_ready", False)),
|
| 961 |
+
"hint_style": getattr(explainer_result, "meta", {}).get("hint_style"),
|
| 962 |
+
"explainer_summary": getattr(explainer_result, "summary", None),
|
| 963 |
+
"explainer_teaching_points": _safe_meta_list(
|
| 964 |
+
getattr(explainer_result, "teaching_points", [])
|
| 965 |
+
),
|
| 966 |
+
"scaffold": scaffold_meta,
|
| 967 |
}
|
| 968 |
return result
|
| 969 |
|