| | 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 {}) |
| |
|
| | @property |
| | def question_text(self): |
| | return self.question.texts[self.lang] |
| |
|
| | @property |
| | 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, |
| | |
| | } |
| | 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 |
| |
|