import openai import os from dotenv import load_dotenv load_dotenv() openai.api_key = os.getenv("OPENAI_API_KEY") def generate_summarizer( max_tokens, temperature, top_p, frequency_penalty, question_type, question, answer ): res = openai.ChatCompletion.create( model="gpt-3.5-turbo", max_tokens=int(max_tokens), temperature=float(temperature), top_p=float(top_p), frequency_penalty=float(frequency_penalty), messages= [ { "role": "system", "content": "You are a IELTS examiner.", }, { "role": "system", "content": f"The question you have to grade is of type {question_type} and is the following: {question}", }, { "role": "system", "content": "Please provide a JSON object response with the overall grade and breakdown grades, " "formatted as follows: {'overall': 7.0, 'task_response': {'Task Achievement': 8.0, " "'Coherence and Cohesion': 6.5, 'Lexical Resource': 7.5, 'Grammatical Range and Accuracy': " "6.0}}", }, { "role": "system", "content": "Don't give explanations for the grades, just provide the json with the grades.", }, { "role": "user", "content": f"Evaluate this answer according to ielts grading system: {answer}", }, ], ) return res["choices"][0]["message"]["content"] import streamlit as st # Set the application title st.title("GPT-3.5 IELTS Examiner") # qt_col, q_col = st.columns(2) # Selection box to select the question type # with qt_col: question_type = st.selectbox( "What is the question type?", ( "Writing Task 2" ), ) # Provide the input area for question to be answered # with q_col: question = st.text_area("Enter the question:", height=100) # Provide the input area for text to be summarized answer = st.text_area("Enter the answer:", height=100) # Initiate two columns for section to be side-by-side # col1, col2 = st.columns(2) # Slider to control the model hyperparameter # with col1: token = st.slider("Token", min_value=0.0, max_value=2000.0, value=1000.0, step=1.0) temp = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.7, step=0.01) top_p = st.slider("Top_p", min_value=0.0, max_value=1.0, value=0.9, step=0.01) f_pen = st.slider("Frequency Penalty", min_value=-1.0, max_value=1.0, value=0.5, step=0.01) # Showing the current parameter used for the model # with col2: with st.expander("Current Parameter"): st.write("Current Token :", token) st.write("Current Temperature :", temp) st.write("Current Nucleus Sampling :", top_p) st.write("Current Frequency Penalty :", f_pen) # Creating button for execute the text summarization if st.button("Grade"): st.write(generate_summarizer(token, temp, top_p, f_pen, question_type, question, answer))