a00801/sidang-simulation
0
1import os2import torch3from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline4import gradio as gr5from pdfminer.high_level import extract_text6import docx7 8# Konfigurasi model9MODEL_NAME = "gpt2" # Ganti dengan model yang diinginkan10tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)11model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)12summarizer = pipeline("summarization", model="facebook/bart-large-cnn")13 14def summarize_text(text):15 summary = summarizer(text, max_length=1500, min_length=500, do_sample=False)16 return summary[0]['summary_text']17 18def ask_model(prompt):19 if len(prompt) > 1024:20 summarized_prompt = summarize_text(prompt)21 inputs = tokenizer(summarized_prompt, return_tensors="pt", truncation=True)22 else:23 inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=1024)24 25 with torch.no_grad():26 outputs = model.generate(27 **inputs,28 max_new_tokens=50029 )30 return tokenizer.decode(outputs[0], skip_special_tokens=True)31 32# Fungsi untuk ekstrak teks dari file DOCX33def extract_text_from_docx(docx_path):34 doc = docx.Document(docx_path)35 return '\n'.join([para.text for para in doc.paragraphs])36 37# Fungsi untuk ekstrak teks dari file PDF38def extract_text_from_pdf(pdf_path):39 return extract_text(pdf_path)40 41def process_file(file):42 if file.name.endswith('.pdf'):43 text = extract_text_from_pdf(file.name)44 elif file.name.endswith('.docx'):45 text = extract_text_from_docx(file.name)46 else:47 return "Unsupported file type", None48 49 return text50 51def chat_function(user_input, history):52 if history is None:53 history = []54 prompt = user_input55 response = ask_model(prompt)56 history.append((user_input, response))57 return "", history58 59def upload_and_process(file, user_input, history):60 text = process_file(file)61 if text.startswith("Unsupported"):62 return text, history63 initial_prompt = f"Here is the thesis content: {text}. Please ask questions about the methodology."64 initial_question = ask_model(initial_prompt)65 history.append(("Upload Complete", initial_question))66 return initial_question, history67 68# Antarmuka Gradio69with gr.Blocks() as demo:70 with gr.Row():71 with gr.Column():72 file_input = gr.File(label="Upload your thesis file")73 text_input = gr.Textbox(label="Type your message here")74 state = gr.State()75 76 upload_button = gr.Button("Upload and Process")77 chat_output = gr.Chatbot()78 79 upload_button.click(upload_and_process, inputs=[file_input, text_input, state], outputs=[chat_output, state])80 text_input.submit(chat_function, inputs=[text_input, state], outputs=[chat_output, state])81 82demo.launch()83 