Spaces:
Runtime error
Runtime error
from typing import Tuple | |
from .question import Question | |
from ..llms import get_llm_fn | |
class QuestionExecutor: | |
def __init__(self, question: Question, lang: str = 'cn', llm: str = 'chatgpt', llm_cfgs=None): | |
self.question = question | |
self.lang = lang | |
self.llm = llm | |
self.llm_cfgs = dict(llm_cfgs or {}) | |
def question_text(self): | |
return self.question.texts[self.lang] | |
def question_name(self): | |
return self.question.names[self.lang] | |
def llm_answer(self, qs_text: str) -> str: | |
return get_llm_fn(self.llm)(qs_text, **self.llm_cfgs) | |
def check(self, qs_text: str) -> Tuple[str, bool, str]: | |
answer_text = self.llm_answer(qs_text) | |
correct, explanation = self.check_answer(qs_text, answer_text) | |
return answer_text, correct, explanation | |
def check_answer(self, user_text: str, answer_text: str) -> Tuple[bool, str]: | |
inputs = { | |
'question_text': self.question_text, | |
'user_text': user_text, | |
'answer_text': answer_text, | |
'lang': self.lang, | |
'llm_callback': self.llm_answer, | |
# this list can be extended if needed in the future | |
} | |
correct, explanation = self.question.checker(inputs) | |
if explanation is None: | |
if correct: | |
explanation = 'LLM的回答满足要求' if self.lang == 'cn' else 'Correct Answer From LLM' | |
else: | |
explanation = 'LLM的回答不满足要求' if self.lang == 'cn' else 'Wrong Answer From LLM' | |
return correct, explanation | |