GraphResearcher / app /generation /question_classifier.py
yugbirla's picture
Sync GraphRAG fusion quality cleanup and evaluation files
b7d0804
Raw
History Blame Contribute Delete
1.97 kB
from typing import Literal
QuestionType = Literal[
"definition",
"summary",
"comparison",
"steps",
"reason",
"general"
]
def classify_question(query: str) -> QuestionType:
query_lower = query.lower().strip()
if query_lower.startswith("what is") or query_lower.startswith("what are"):
return "definition"
if query_lower.startswith("define") or "meaning of" in query_lower:
return "definition"
if "summarize" in query_lower or "summary" in query_lower:
return "summary"
if "compare" in query_lower or "difference between" in query_lower or "vs" in query_lower:
return "comparison"
if query_lower.startswith("how to") or "steps" in query_lower or "step by step" in query_lower:
return "steps"
if query_lower.startswith("why") or "reason" in query_lower:
return "reason"
return "general"
def get_answer_instruction(question_type: QuestionType) -> str:
if question_type == "definition":
return (
"Give a clear definition first. Then explain why it matters. "
"Keep the answer short and cite the evidence."
)
if question_type == "summary":
return (
"Give a concise structured summary using the most important points. "
"Avoid unnecessary details and cite sources."
)
if question_type == "comparison":
return (
"Compare the concepts clearly. Mention similarities, differences, "
"and practical implications. Cite sources."
)
if question_type == "steps":
return (
"Explain the answer as clear steps. Keep each step simple. Cite sources."
)
if question_type == "reason":
return (
"Explain the reason logically using evidence from the sources. Cite sources."
)
return (
"Answer clearly using only the retrieved sources. Cite the evidence."
)