Spaces:
Sleeping
Sleeping
File size: 3,281 Bytes
c8e8be4 a10bc68 c8e8be4 855dfb9 a10bc68 c8e8be4 a10bc68 891f3b9 c8e8be4 a10bc68 c8e8be4 a10bc68 c8e8be4 a10bc68 c8e8be4 a10bc68 c8e8be4 f6e34f2 a10bc68 f6e34f2 a10bc68 f6e34f2 a10bc68 f6e34f2 87ae702 855dfb9 87ae702 |
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 |
import json
from dotenv import load_dotenv
from openai import OpenAI
from audio import numpy_audio_to_bytes
from prompts import coding_interviewer_prompt, grading_feedback_prompt
load_dotenv()
# TODO: don't use my key
client = OpenAI()
def init_bot(problem=""):
chat_history = [
{"role": "system", "content": coding_interviewer_prompt},
{"role": "system", "content": f"The candidate is solving the following problem: {problem}"},
]
return chat_history
def get_problem(requirements, difficulty, topic, model, client=client):
prompt_system = "You are ChatGPT acting as a coding round interviewer for a big-tech company. "
full_prompt = f"Generate a {difficulty} {topic} problem in. Follow additional requirements: {requirements}. The problem should be solvable within 30 minutes."
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": prompt_system},
{"role": "user", "content": full_prompt},
],
)
question = response.choices[0].message.content.strip()
chat_history = init_bot(question)
return question, chat_history
def end_interview(chat_history, model, client=client):
transcript = []
for message in chat_history[1:]:
role = message["role"]
content = f"{role.capitalize()}: {message['content']}"
transcript.append(content)
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": grading_feedback_prompt},
{"role": "user", "content": "Interview transcript:" + "\n\n".join(transcript)},
{"role": "user", "content": "Grade the interview based on the transcript provided and give a feedback."},
],
)
feedback = response.choices[0].message.content.strip()
return feedback
def send_request(code, previous_code, message, chat_history, chat_display, model, client=client):
if code != previous_code:
chat_history.append({"role": "user", "content": f"My latest code: {code}"})
chat_history.append({"role": "user", "content": message})
response = client.chat.completions.create(model=model, response_format={"type": "json_object"}, messages=chat_history)
json_reply = response.choices[0].message.content.strip()
try:
data = json.loads(json_reply)
reply = data["reply_to_candidate"]
except json.JSONDecodeError as e:
print("Failed to decode JSON:", str(e))
reply = "There was an error processing your request."
chat_history.append({"role": "assistant", "content": json_reply})
chat_display.append([message, str(reply)])
return chat_history, chat_display, "", code
def transcribe_audio(audio, client=client):
transcription = client.audio.transcriptions.create(
model="whisper-1", file=("temp.wav", numpy_audio_to_bytes(audio[1]), "audio/wav"), response_format="text"
)
return transcription
def text_to_speech(text, client=client):
response = client.audio.speech.create(model="tts-1", voice="alloy", input=text)
return response.content
def read_last_message(chat_display):
last_message = chat_display[-1][1]
audio = text_to_speech(last_message)
return audio
|