YashJD's picture
Initial Commit
e107ee4
import os
import pandas as pd
import numpy as np
from numpy.linalg import norm
from pymongo import MongoClient
import openai
from openai import OpenAI
import streamlit as st
from datetime import datetime
# MongoDB connection
MONGO_URI = os.getenv('MONGO_URI')
client = MongoClient(MONGO_URI)
db = client['digital_nova']
themes_collection = db['themes']
corpus_collection = db['corpus']
vectors_collection = db['vectors'] # Reference to 'vectors' collection
users_collection = db['users']
# Function to create embeddings
def create_embeddings(text, openai_api_key):
client = OpenAI(api_key=openai_api_key)
response = client.embeddings.create(
input=text,
model="text-embedding-3-small"
)
return response.data[0].embedding
# Function to calculate cosine similarity
def cosine_similarity(v1, v2):
v1 = np.array(v1)
v2 = np.array(v2)
dot_product = np.dot(v1, v2)
norm_product = norm(v1) * norm(v2)
return dot_product / norm_product if norm_product != 0 else 0
def derive_analytics(goal, reference_text, openai_api_key, context=None, synoptic=None):
"""
Analyze subjective answers with respect to pre-class materials and synoptic, and provide detailed feedback
Args:
goal (str): Analysis objective
reference_text (str): Student's answer text
openai_api_key (str): OpenAI API key
context (str, optional): Pre-class material content for comparison
synoptic (str, optional): Synoptic content for evaluation
"""
template = f"""Given a student's answer to a subjective question, analyze it following these specific guidelines. Compare it with the provided pre-class materials and synoptic (if available) to assess correctness and completeness.
1. Analyze the text as an experienced educational assessor, considering:
- Conceptual understanding
- Factual accuracy
- Completeness of response
- Use of relevant terminology
- Application of concepts
2. Structure the output in markdown with two sections:
**Correctness Assessment**
- Rate overall correctness on a scale of 1-10
**Evidence-Based Feedback**
- Provide specific evidence from the student's answer to justify the score reduction
- Highlight the exact lines or phrases that need improvement
Pre-class Materials Context:
{context if context else "No reference materials provided"}
Synoptic:
{synoptic if synoptic else "No synoptic provided"}
Student's Answer:
{reference_text}
Rules:
- Base assessment strictly on provided content
- Be specific in feedback and suggestions
"""
# Initialize OpenAI client
client = OpenAI(api_key=openai_api_key)
try:
response = client.chat.completions.create(
model="gpt-4-0125-preview",
messages=[
{"role": "system", "content": "You are an educational assessment expert."},
{"role": "user", "content": template}
],
temperature=0.7
)
analysis = response.choices[0].message.content
return analysis
except Exception as e:
print(f"Error in generating analysis with OpenAI: {str(e)}")
return "Error generating analysis"