HansBug's picture
dev(hansbug): fix this
08cbdf8
raw
history blame
No virus
3.12 kB
import os
import gradio as gr
from llmriddles.questions import QuestionExecutor
from llmriddles.questions import list_ordered_questions
_QUESTION_ID = -1
_QUESTIONS = list_ordered_questions()
_LANG = os.environ.get('QUESTION_LANG', 'cn')
_LLM = os.environ.get('QUESTION_LLM', 'chatgpt')
def _need_api_key():
return _LLM == 'chatgpt'
def _get_api_key_cfgs(api_key):
if _LLM == 'chatgpt':
return {'api_key': api_key}
else:
return {}
if __name__ == '__main__':
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
gr_requirement = gr.TextArea(placeholder='Click \'Next\' to Start', label='Requirements')
gr_question = gr.TextArea(placeholder='Your Question for LLM', label='Question')
gr_answer = gr.TextArea(placeholder='Answer From LLM', label='Answer')
gr_submit = gr.Button('Submit', interactive=False)
with gr.Column():
gr_api_key = gr.Text(placeholder='Your API Key', label='API Key', type='password',
visible=_need_api_key())
gr_predict = gr.Label(label='Correctness')
gr_explanation = gr.TextArea(label='Explanation')
gr_next = gr.Button('Next')
def _next_question():
global _QUESTION_ID
_QUESTION_ID += 1
if _QUESTION_ID >= len(_QUESTIONS):
return 'Congratulations!', '', '', {}, '', \
gr.Button('Submit', interactive=False), \
gr.Button('Next', interactive=False)
else:
executor = QuestionExecutor(_QUESTIONS[_QUESTION_ID], _LANG)
return executor.question_text, '', '', {}, '', \
gr.Button('Submit', interactive=True), \
gr.Button('Next', interactive=False)
gr_next.click(
fn=_next_question,
inputs=[],
outputs=[gr_requirement, gr_question, gr_answer, gr_predict, gr_explanation, gr_submit, gr_next],
)
def _submit_answer(qs_text: str, api_key: str):
if _need_api_key() and not api_key:
return '---', {}, 'Please Enter API Key Before Submitting Question.', \
gr.Button('Next', interactive=False)
executor = QuestionExecutor(
_QUESTIONS[_QUESTION_ID], _LANG,
llm=_LLM, llm_cfgs=_get_api_key_cfgs(api_key) if _need_api_key() else {}
)
answer_text, correctness, explanation = executor.check(qs_text)
labels = {'Correct': 1.0} if correctness else {'Wrong': 1.0}
if correctness:
return answer_text, labels, explanation, gr.Button('Next', interactive=True)
else:
return answer_text, labels, explanation, gr.Button('Next', interactive=False)
gr_submit.click(
_submit_answer,
inputs=[gr_question, gr_api_key],
outputs=[gr_answer, gr_predict, gr_explanation, gr_next],
)
demo.launch()