| import fitz |
| from pptx import Presentation |
| from openai import OpenAI |
| import os |
|
|
| |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) |
| MAX_TOKENS = 7000 |
|
|
| |
| def call_llm(prompt, system_message="You are a helpful assistant.", temperature=0.7): |
| |
| approx_tokens = len(prompt) // 4 |
| if approx_tokens > MAX_TOKENS: |
| prompt = prompt[:MAX_TOKENS * 4] |
| prompt += "\n[NOTE: Truncated due to length limit.]" |
|
|
| response = client.chat.completions.create( |
| model="gpt-4", |
| messages=[ |
| {"role": "system", "content": system_message}, |
| {"role": "user", "content": prompt} |
| ], |
| temperature=temperature |
| ) |
| return response.choices[0].message.content |
|
|
| |
| def extract_text_from_pdf(pdf_path): |
| text = "" |
| with fitz.open(pdf_path) as doc: |
| for page in doc: |
| text += page.get_text() |
| return text |
|
|
|
|
| def extract_text_from_txt(file_path): |
| with open(file_path, 'r', encoding='utf-8') as f: |
| return f.read() |
|
|
|
|
| def extract_text_from_md(file_path): |
| with open(file_path, 'r', encoding='utf-8') as f: |
| return f.read() |
|
|
|
|
| def extract_text_from_pptx(file_path): |
| text = "" |
| prs = Presentation(file_path) |
| for slide in prs.slides: |
| for shape in slide.shapes: |
| if hasattr(shape, "text"): |
| text += shape.text + "\n" |
| return text |
|
|
|
|
| def extract_text_from_file(file): |
| if file is None: |
| return "" |
|
|
| name = file.name.lower() |
| if name.endswith(".pdf"): |
| return extract_text_from_pdf(file.name) |
| elif name.endswith(".txt"): |
| return extract_text_from_txt(file.name) |
| elif name.endswith(".md"): |
| return extract_text_from_md(file.name) |
| elif name.endswith(".pptx"): |
| return extract_text_from_pptx(file.name) |
| else: |
| return "Unsupported file type." |
|
|
|
|
| |
| def generate_summary(text): |
| prompt = f"""Please summarize the following study material in a concise and organized manner: |
| |
| {text} |
| """ |
| return call_llm(prompt, system_message="You are a helpful study assistant.") |
|
|
|
|
| def generate_flashcards(text): |
| prompt = f"""Based on the content below, create a set of helpful flashcards. |
| Each flashcard should be formatted as: |
| Q: Question? |
| A: Answer. |
| |
| {text} |
| """ |
| return call_llm(prompt, system_message="You are a flashcard generator assistant.") |
|
|
|
|
| def generate_quiz(text): |
| prompt = f"""Create a short quiz (3-5 questions) based on the content below. |
| Include a mix of multiple choice and short answer questions. |
| |
| {text} |
| """ |
| return call_llm(prompt, system_message="You are a quiz generator assistant.") |
|
|
|
|
| def answer_question(text, question): |
| prompt = f"""You are an AI tutor. Answer the following question based only on the content below. |
| |
| Content: |
| {text} |
| |
| Question: |
| {question} |
| """ |
| return call_llm(prompt, system_message="You are a helpful and accurate tutor that stays grounded in provided content.") |
|
|