Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import openai | |
| import fitz # PyMuPDF | |
| import time | |
| # Set your OpenAI API key | |
| openai.api_key = 'sk-proj-fCrObs9lnucfEFwJdMkHT3BlbkFJA7auo8szgjDuHz28QGBW' | |
| def extract_text_from_pdf(pdf_file): | |
| text = "" | |
| try: | |
| if isinstance(pdf_file, bytes): | |
| document = fitz.open(stream=pdf_file, filetype="pdf") | |
| else: | |
| document = fitz.open(stream=pdf_file.read(), filetype="pdf") | |
| for page_num in range(len(document)): | |
| page = document.load_page(page_num) | |
| text += page.get_text() | |
| except Exception as e: | |
| return str(e) | |
| return text | |
| def generate_summary(text): | |
| response = openai.Completion.create( | |
| engine="text-davinci-003", | |
| prompt=f"Please summarize the following text: {text}", | |
| max_tokens=100 | |
| ) | |
| summary = response['choices'][0]['text'].strip() | |
| return summary | |
| def evaluate_text_against_rubric(rubric_text, text): | |
| start_time = time.time() | |
| # Split rubric into criteria | |
| criteria = [criterion.strip() for criterion in rubric_text.split('\n') if criterion.strip()] | |
| if not criteria: | |
| return "No valid criteria found in the rubric." | |
| if not text: | |
| return "No text provided for evaluation." | |
| evaluations = {} | |
| for i, criterion in enumerate(criteria): | |
| try: | |
| summary = generate_summary(text[:1000]) | |
| evaluations[f'Criteria {i+1}'] = { | |
| "Criterion": criterion, | |
| "Score": 3, # Dummy score for now | |
| "Comment": f"Evaluation based on criterion: {criterion}", | |
| "Example": summary | |
| } | |
| except Exception as e: | |
| evaluations[f'Criteria {i+1}'] = { | |
| "Criterion": criterion, | |
| "Score": 0, | |
| "Comment": f"Error during evaluation: {str(e)}", | |
| "Example": "" | |
| } | |
| end_time = time.time() | |
| print(f"Evaluation took {end_time - start_time} seconds") | |
| return evaluations | |
| def evaluate(rubric_pdf, rubric_text, text): | |
| rubric = "" | |
| if rubric_pdf is not None: | |
| rubric = extract_text_from_pdf(rubric_pdf) | |
| elif rubric_text: | |
| rubric = rubric_text | |
| if not rubric: | |
| return "No rubric provided." | |
| if not text: | |
| return "No text provided for evaluation." | |
| if len(text) > 2000: | |
| return "The text provided exceeds the 2000 character limit." | |
| evaluation = evaluate_text_against_rubric(rubric, text) | |
| if isinstance(evaluation, str): # If it's an error message | |
| return evaluation | |
| evaluation_text = "" | |
| for criterion, details in evaluation.items(): | |
| evaluation_text += f"{criterion}:\n" | |
| evaluation_text += f" Criterion: {details['Criterion']}\n" | |
| evaluation_text += f" Score: {details['Score']}\n" | |
| evaluation_text += f" Comment: {details['Comment']}\n" | |
| evaluation_text += f" Example: {details['Example']}\n\n" | |
| return evaluation_text | |
| # Create Gradio interface | |
| with gr.Blocks() as interface: | |
| gr.Markdown("# PDF Text Evaluator") | |
| gr.Markdown("Upload a rubric as a PDF or paste the rubric text, then paste text for evaluation.") | |
| rubric_pdf_input = gr.File(label="Upload Rubric PDF (optional)", type="binary") | |
| rubric_text_input = gr.Textbox(lines=10, placeholder="Or enter your rubric text here...", label="Rubric Text (optional)") | |
| text_input = gr.Textbox(lines=10, placeholder="Paste the text to be evaluated here (max 2000 characters)...", label="Text to Evaluate") | |
| evaluate_button = gr.Button("Evaluate") | |
| output = gr.Textbox(label="Evaluation Results") | |
| def evaluate_button_clicked(rubric_pdf, rubric_text, text): | |
| return evaluate(rubric_pdf, rubric_text, text) | |
| evaluate_button.click(evaluate_button_clicked, inputs=[rubric_pdf_input, rubric_text_input, text_input], outputs=output) | |
| # Launch the interface | |
| interface.launch() | |