# app.py import gradio as gr import openai import os import AlpsData # Importing the AlpsData module import base64 OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") openai.api_key = OPENAI_API_KEY def image_to_base64(img_path): with open(img_path, "rb") as img_file: return base64.b64encode(img_file.read()).decode('utf-8') img_base64 = image_to_base64("AlpsSBC.JPG") img_html = f'SBC6' def predict(question_choice, feedback_level, audio): # Transcribe the audio using Whisper with open(audio, "rb") as audio_file: transcript = openai.Audio.transcribe("whisper-1", audio_file) message = transcript["text"] # This is the transcribed message from the audio input # Generate the prompt based on the feedback level feedback_prompt = AlpsData.generate_prompt(feedback_level) # Determine question number based on question_choice question_number = AlpsData.questions.index(question_choice) + 1 # New line # Generate the system message based on the question number system_message = AlpsData.generate_system_message(question_number, feedback_level) # Updated line to include feedback_level # Reference to the picture description from AlpsData.py picture_description = AlpsData.description # Determine whether to include the picture description based on the question choice picture_description_inclusion = f""" For the first question, ensure your feedback refers to the picture description provided: {picture_description} """ if question_choice == AlpsData.questions[0] else "" # Construct the conversation with the system and user's message conversation = [ { "role": "system", "content": f""" You are an expert English Language Teacher in a Singapore Primary school, directly guiding a Primary 6 student in Singapore. The student is answering the question: '{question_choice}'. {picture_description_inclusion} {system_message} """ }, {"role": "user", "content": message} ] response = openai.ChatCompletion.create( model='gpt-3.5-turbo', messages=conversation, temperature=0.6, max_tokens=550, # Limiting the response to 550 tokens stream=True ) partial_message = "" for chunk in response: if len(chunk['choices'][0]['delta']) != 0: partial_message = partial_message + chunk['choices'][0]['delta']['content'] yield partial_message iface = gr.Interface( fn=predict, inputs=[ gr.Radio(AlpsData.questions, label="Choose a question", default=AlpsData.questions[0]), # Updated reference gr.Radio(["Brief Feedback", "Moderate Feedback", "Comprehensive Feedback"], label="Choose a feedback level", default="Brief Feedback"), gr.inputs.Audio(source="microphone", type="filepath") ], outputs=gr.inputs.Textbox(), description=img_html + '''
📝 Click here to provide feedback on the initial prototype of the Oral Coach 📝
''', css="custom.css" ) iface.queue(max_size=99, concurrency_count=40).launch(debug=True)