from ai71 import AI71 from PyPDF2 import PdfReader from pdf2image import convert_from_path import cv2 import numpy as np import pytesseract import subprocess from PIL import Image AI71_API_KEY = "api71-api-652e5c6c-8edf-41d0-9c34-28522b07bef9" subprocess.run(['apt-get','update']) subprocess.run(['apt-get','install','-y','tesseract-ocr']) def extract_text_from_pdf(pdf_file): text = "" reader = PdfReader(pdf_file) for page in reader.pages: text += page.extract_text() return text def generate_questions_from_text(text, no_of_questions, marks_per_part, no_parts): ai71 = AI71(AI71_API_KEY) messages = [ {"role": "system", "content": "You are a teaching assistant"}, {"role": "user", "content": f"Give your own {no_of_questions} questions under each part for {no_parts} parts with {marks_per_part} marks for each part. Note that all questions must be from the topics of {text}"} ] questions = [] for chunk in ai71.chat.completions.create( model="tiiuae/falcon-180b-chat", messages=messages, stream=True, ): if chunk.choices[0].delta.content: questions.append(chunk.choices[0].delta.content) return "".join(questions) def extract_text_from_image(image_path): img = Image.open(image_path) text = pytesseract.image_to_string(img) return text def evaluate(question, answer, max_marks): prompt = f"""Questions: {question} Answer: {answer}. Evaluate above questions one by one(if there are multiple) by provided answers and assign marks out of {max_marks}. No need overall score. Note that as maximum mark increases, the size of the answer must be large enough to get good marks. Give ouput in format below: assigned marks: total marks: Note that you should not display total marks""" messages = [ {"role": "system", "content": "You are an answer evaluator"}, {"role": "user", "content": prompt} ] response_content = "" for chunk in AI71(AI71_API_KEY).chat.completions.create( model="tiiuae/falcon-180b-chat", messages=messages, stream=True ): if chunk.choices[0].delta.content: response_content += chunk.choices[0].delta.content return response_content def generate_student_report(name, age, cgpa, course, assigned_test, ai_test, interests, difficulty, courses_taken): prompt = f""" Name: {name} Age: {age} CGPA: {cgpa} Course: {course} Assigned Test Score: {assigned_test} AI generated Test Score: {ai_test} Interests: {interests} Difficulty in: {difficulty} Courses Taken: {courses_taken} Use the above student data to generate a neat personalized report and suggested teaching methods.""" client = AI71(AI71_API_KEY) response = client.chat.completions.create( model="tiiuae/falcon-180B-chat", messages=[ {"role": "system", "content": "You are a student report generator."}, {"role": "user", "content": prompt} ] ) report = response.choices[0].message.content if response.choices and response.choices[ 0].message else "No report generated." print(report) return report def generate_timetable_module(data,hours_per_day,days_per_week,semester_end_date,subjects): response = AI71(AI71_API_KEY).chat.completions.create( model="tiiuae/falcon-180B-chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": f"Create a timetable starting from Monday based on the following inputs:\n" f"- Number of hours per day: {hours_per_day}\n" f"- Number of days per week: {days_per_week}\n" f"- Semester end date: {semester_end_date}\n" f"- Subjects: {', '.join(subjects)}\n"} ] ) # Access the response content correctly return( response.choices[0].message.content if response.choices and response.choices[0].message else "No timetable generated.") def cluster_topics(academic_topics): prompt = ( "Please cluster the following academic topics into their respective subjects such as Mathematics, Physics, etc.: " + ", ".join(academic_topics)) response = "" for chunk in AI71(AI71_API_KEY).chat.completions.create( model="tiiuae/falcon-180b-chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}, ], stream=True, ): if chunk.choices[0].delta.content: response += chunk.choices[0].delta.content return response def generate_timetable_weak(clustered_subjects, hours_per_day): prompt = ( f"Using the following subjects and topics:\n{clustered_subjects}\n" f"Generate a special class timetable for {hours_per_day} hours per day.\n" f"Also provide reference books and methods to teach the slow learners for each subject" ) response = "" for chunk in AI71(AI71_API_KEY).chat.completions.create( model="tiiuae/falcon-180b-chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}, ], stream=True, ): if chunk.choices[0].delta.content: response += chunk.choices[0].delta.content return response