Spaces:
Sleeping
Sleeping
File size: 5,726 Bytes
df25732 87ae702 a82cf01 a10bc68 c57cd9a 87ae702 855dfb9 87ae702 c57cd9a 87ae702 855dfb9 87ae702 c57cd9a df25732 891f3b9 df25732 a10bc68 df25732 a10bc68 c57cd9a a10bc68 f6e34f2 891f3b9 a10bc68 c57cd9a df25732 a10bc68 87ae702 df25732 87ae702 df25732 87ae702 855dfb9 87ae702 df25732 a10bc68 87ae702 c57cd9a 87ae702 a10bc68 f6e34f2 c57cd9a 87ae702 c57cd9a c8e8be4 87ae702 f913a0b 87ae702 df25732 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
import gradio as gr
from llm import end_interview, get_problem, read_last_message, send_request, transcribe_audio
from options import languages_list, models, topics_list
def hide_settings():
init_acc = gr.Accordion("Settings", open=False)
start_btn = gr.Button("Generate a problem", interactive=False)
solution_acc = gr.Accordion("Solution", open=True)
end_btn = gr.Button("Finish the interview", interactive=True)
send_btn = gr.Button("Send", interactive=True)
audio_input = gr.Audio(
label="Record audio",
sources=["microphone"],
type="numpy",
waveform_options={"show_controls": False},
interactive=True,
editable=False,
)
chat = [
(
None,
"Welcome to the interview! Please take a moment to read the problem statement. Then you can share you initial thoughts and ask any questions you may have. Good luck!",
)
]
return init_acc, start_btn, solution_acc, end_btn, send_btn, audio_input, chat
def hide_solution():
solution_acc = gr.Accordion("Solution", open=False)
end_btn = gr.Button("Finish the interview", interactive=False)
problem_acc = gr.Accordion("Problem statement", open=False)
send_btn = gr.Button("Send", interactive=False)
audio_input = gr.Audio(
label="Record audio",
sources=["microphone"],
type="numpy",
waveform_options={"show_controls": False},
interactive=False,
editable=False,
)
return solution_acc, end_btn, problem_acc, send_btn, audio_input
def return_none():
return None
with gr.Blocks() as demo:
gr.Markdown("Your coding interview practice AI assistant!")
# TODO: add instructions tab
# TODO: add other types of interviews (e.g. system design, ML design, behavioral, etc.)
with gr.Tab("Coding"):
chat_history = gr.State([])
previous_code = gr.State("")
client = gr.State(None)
with gr.Accordion("Settings") as init_acc:
with gr.Row():
with gr.Column():
gr.Markdown("Difficulty")
difficulty_select = gr.Dropdown(
label="Select difficulty", choices=["Easy", "Medium", "Hard"], value="Medium", container=False
)
gr.Markdown("Topic")
topic_select = gr.Dropdown(
label="Select topic", choices=topics_list, value="Arrays", container=False, allow_custom_value=True
)
gr.Markdown("Select LLM model to use")
model_select = gr.Dropdown(label="Select model", choices=models, value="gpt-3.5-turbo", container=False)
with gr.Column():
requirements = gr.Textbox(
label="Requirements", placeholder="Specify requirements: topic, difficulty, language, etc.", lines=5
)
start_btn = gr.Button("Generate a problem")
# TODO: select LLM model
with gr.Accordion("Problem statement", open=True) as problem_acc:
description = gr.Markdown()
with gr.Accordion("Solution", open=False) as solution_acc:
with gr.Row() as content:
with gr.Column(scale=2):
language_select = gr.Dropdown(
label="Select language", choices=languages_list, value="python", container=False, interactive=True
)
code = gr.Code(label="Solution", language=language_select.value, lines=35)
with gr.Column(scale=1):
end_btn = gr.Button("Finish the interview", interactive=False)
chat = gr.Chatbot(label="Chat history")
audio_input = gr.Audio(
label="Record audio",
sources=["microphone"],
type="numpy",
waveform_options={"show_controls": False},
interactive=False,
editable=False,
)
audio_output = gr.Audio(label="Play audio", autoplay=True, visible=False)
message = gr.Textbox(label="Message", lines=3)
send_btn = gr.Button("Send", interactive=False)
with gr.Accordion("Feedback", open=True) as feedback_acc:
feedback = gr.Markdown()
start_btn.click(
fn=get_problem,
inputs=[requirements, difficulty_select, topic_select, model_select],
outputs=[description, chat_history],
scroll_to_output=True,
).then(fn=hide_settings, inputs=None, outputs=[init_acc, start_btn, solution_acc, end_btn, send_btn, audio_input, chat])
send_btn.click(
fn=send_request,
inputs=[code, previous_code, message, chat_history, chat, model_select],
outputs=[chat_history, chat, message, previous_code],
)
end_btn.click(fn=end_interview, inputs=[chat_history, model_select], outputs=feedback).then(
fn=hide_solution, inputs=None, outputs=[solution_acc, end_btn, problem_acc, send_btn, audio_input]
)
audio_input.stop_recording(fn=transcribe_audio, inputs=[audio_input], outputs=[message]).then(
fn=return_none, inputs=None, outputs=[audio_input]
).then(
fn=send_request,
inputs=[code, previous_code, message, chat_history, chat, model_select],
outputs=[chat_history, chat, message, previous_code],
)
chat.change(fn=read_last_message, inputs=[chat], outputs=[audio_output])
audio_output.stop(fn=return_none, inputs=None, outputs=[audio_output])
demo.launch()
|