import openai from openai import OpenAI import streamlit as st from streamlit import session_state import numpy as np import json import os client = OpenAI() openai.api_key = os.getenv("OPENAI_API_KEY") from sentence_transformers import SentenceTransformer, LoggingHandler, losses, util, InputExample model = SentenceTransformer('models/transformer_model/') from scipy import spatial def cosine_similarity(x,y): return 1 - spatial.distance.cosine(x,y) def gpt_scorer(m,s): response = client.chat.completions.create( model="gpt-4", messages=[ { "role": "system", "content": "You are UPSC answers evaluater. You will be given model answer and student answer. Evaluate it by comparing with the model answer. \n<>\nIt is 10 marks question. Give marks in the range of 0.5. (ex. 0,0.5,1...)\nPlease give marks generously. If the student answer body matches more than 70% with the model answer then give full marks for body. \nIf the student answer and model answer is not relevant then give 0 marks.\ngive output in json format. Give output in this format {\"total\":}\n<>" }, { "role": "user", "content": f"Model answer: {m}"}, { "role": "user", "content": f"Student answer: {s}" } ], temperature=0, max_tokens=256, top_p=1, frequency_penalty=0, presence_penalty=0,seed = 10 ) return json.loads(response.choices[0].message.content) def embeddings_cosine(s1,s2,model): embeddings1 = model.encode(s1) embeddings2 = model.encode(s2) cosine_scores = cosine_similarity(embeddings1, embeddings2) cosine_scores = cosine_scores*10 return np.abs(np.round(cosine_scores * 2) / 2) def main_score(m,s): score1 = embeddings_cosine(m,s,model) score_g = gpt_scorer(m,s) print(score_g) score2 = score_g['total'] print(score1,"our model") percentage_difference = (abs(score1 - score2) / 10) * 100 if percentage_difference > 30: return score2 elif score2 == 0: return score2 else: return score1 from st_pages import Page, Section, show_pages, add_page_title,add_indentation st.set_page_config(page_title="Auto score Openai", page_icon="📈") st.markdown("

Welcome to Our App! 👋

", unsafe_allow_html=True) if 'result' not in session_state: session_state['result']= "" st.title("Auto score") text1= st.text_area(label= "Please write the model answer bellow", placeholder="What does the teacher say?") text2= st.text_area(label= "Please write the student answer bellow", placeholder="What does the student say?") def classify(text1,text2): session_state['result'] = main_score(text1,text2) st.text_area("result", value=session_state['result']) st.button("Classify", on_click=classify, args=[text1,text2])