gsingh78/ContractSense
0
1import gradio as gr2import requests3import pandas as pd4import json5import base646import os7 8BACKEND_URL = os.getenv("BACKEND_URL", "https://contract-app-benu.onrender.com")9 10def upload_contract(file):11 if file is None:12 return "Please upload a contract file.", None, None13 14 try:15 filename = file.name16 with open(file.name, 'rb') as f:17 file_content = f.read()18 19 file_content_b64 = base64.b64encode(file_content).decode('utf-8')20 21 response = requests.post(f"{BACKEND_URL}/upload-contract", 22 json={"filename": filename, "content": file_content_b64})23 response.raise_for_status()24 conditions = response.json()['conditions']25 26 # Save conditions to a JSON file27 json_filename = "contract_conditions.json"28 with open(json_filename, 'w') as f:29 json.dump(conditions, f, indent=2)30 31 return json.dumps(conditions, indent=2), conditions, json_filename32 except Exception as e:33 return f"An error occurred: {str(e)}", None, None34 35def analyze_tasks(tasks_file, contract_conditions):36 if tasks_file is None:37 return gr.Dataframe(value=pd.DataFrame({"Error": ["Please upload a tasks file."]})), "No analysis performed.", None38 if contract_conditions is None:39 return gr.Dataframe(value=pd.DataFrame({"Error": ["Please upload and extract contract conditions first."]})), "No analysis performed.", None40 41 try:42 with open(tasks_file.name, 'rb') as f:43 file_content = f.read()44 45 file_content_b64 = base64.b64encode(file_content).decode('utf-8')46 47 data = {48 'filename': tasks_file.name,49 'content': file_content_b64,50 'contract_conditions': json.dumps(contract_conditions)51 }52 response = requests.post(f"{BACKEND_URL}/analyze-tasks", json=data)53 response.raise_for_status()54 results = response.json()['results']55 df = pd.DataFrame(results)56 57 # Save results to a CSV file58 csv_filename = "task_analysis_results.csv"59 df.to_csv(csv_filename, index=False)60 61 return gr.Dataframe(value=df), format_detailed_results(results), csv_filename62 except Exception as e:63 return gr.Dataframe(value=pd.DataFrame({"Error": [f"An error occurred: {str(e)}"]})), "Error occurred during analysis", None64 65def format_detailed_results(results):66 formatted = ""67 for i, result in enumerate(results, 1):68 formatted += f"Task {i}:\n"69 formatted += f"Compliant: {result['compliant']}\n"70 formatted += f"Reason: {result['reason']}\n"71 formatted += f"Adjusted Amount: ${result['adjusted_amount']:.2f}\n"72 formatted += f"Applied Multipliers: {', '.join(result['applied_multipliers'])}\n"73 formatted += f"Additional Notes: {result['additional_notes']}\n\n"74 return formatted75 76with gr.Blocks() as demo:77 gr.Markdown("# Contract Analysis App")78 79 contract_conditions = gr.State(None)80 81 with gr.Tab("Upload Contract"):82 contract_input = gr.File(label="Upload Contract File (DOCX)")83 contract_output = gr.Textbox(label="Extracted Conditions", lines=10)84 contract_button = gr.Button("Extract Conditions")85 contract_download = gr.File(label="Download Extracted Conditions (JSON)")86 87 with gr.Tab("Analyze Tasks"):88 tasks_input = gr.File(label="Upload Tasks File (CSV/Excel)")89 tasks_output = gr.Dataframe(label="Analysis Results")90 detailed_output = gr.Textbox(label="Detailed Analysis", lines=10)91 tasks_button = gr.Button("Analyze Tasks")92 results_download = gr.File(label="Download Analysis Results (CSV)")93 94 contract_button.click(95 upload_contract, 96 inputs=contract_input, 97 outputs=[contract_output, contract_conditions, contract_download]98 )99 tasks_button.click(100 analyze_tasks, 101 inputs=[tasks_input, contract_conditions], 102 outputs=[tasks_output, detailed_output, results_download]103 )104 105demo.launch(share=True)