import google.generativeai as genai import base64 import gradio as gr from dotenv import load_dotenv import os load_dotenv() token = os.getenv("GOOGLE_API_KEY") genai.configure(api_key=token) model = genai.GenerativeModel("gemini-1.5-flash") def proses_materi(nama_pdf, indikator_pencapaian): try: with open(nama_pdf, "rb") as doc_file: doc_data = base64.standard_b64encode(doc_file.read()).decode("utf-8") prompt = ( f"Buatkan daftar 5 pertanyaan dari file tersebut dengan poin indikator tujuan soal seperti: {indikator_pencapaian}. " "Format output harus sebagai berikut:\n" "---SOAL---\n" "1. [Pertanyaan 1]\n" "2. [Pertanyaan 2]\n" "3. [Pertanyaan 3]\n" "4. [Pertanyaan 4]\n" "5. [Pertanyaan 5]\n" "---JAWABAN---\n" "1. [Jawaban 1]\n" "2. [Jawaban 2]\n" "3. [Jawaban 3]\n" "4. [Jawaban 4]\n" "5. [Jawaban 5]\n" ) response = model.generate_content([{'mime_type': 'application/pdf', 'data': doc_data}, prompt]) response_text = response.text if "---SOAL---" in response_text and "---JAWABAN---" in response_text: soal, jawaban = response_text.split("---JAWABAN---") soal = soal.replace("---SOAL---", "").strip() jawaban = jawaban.strip() else: soal = response_text jawaban = "" return soal, jawaban except Exception as e: return f"Terjadi kesalahan: {str(e)}", "" def evaluate_answer(kunci_jawaban, jawaban_siswa): try: prompt = ( f"Diperlihatkan jawaban salah satu siswa sebagai berikut : {jawaban_siswa}, " f"Sementara jawaban yang benar pada kunci jawaban sebagai berikut {kunci_jawaban}. " "Berikan komentar yang padat terhadap jawaban siswamu dan berikan rate 0-10, " "dimana semakin tinggi ratingnya jika jawaban siswa tepat atau sesuai dengan yang ada di kunci jawaban" ) response = model.generate_content([prompt]) return response.text except Exception as e: return f"Terjadi kesalahan saat mengevaluasi: {str(e)}" with gr.Blocks() as demo: with gr.Row(): with gr.Column(): pdf_input = gr.File(label="Upload PDF", file_types=[".pdf"]) indicator_input = gr.Textbox(label="Indikator Pembelajaran", placeholder="Masukkan indikator pembelajaran...") submit_btn = gr.Button("Generate Questions and Answers") with gr.Column(): questions_output = gr.Textbox(label="Generated Questions", interactive=False) answers_output = gr.Textbox(label="Generated Answers", interactive=False) student_answer_input = gr.Textbox(label="Jawaban Siswa", placeholder="Masukkan jawaban siswa...") evaluate_btn = gr.Button("Evaluate Answer") evaluation_output = gr.Textbox(label="Evaluation Result", interactive=False) submit_btn.click( fn=proses_materi, inputs=[pdf_input, indicator_input], outputs=[questions_output, answers_output] ) evaluate_btn.click( fn=evaluate_answer, inputs=[answers_output, student_answer_input], outputs=evaluation_output ) demo.launch(debug=False)