CoolFace
Apppublic

gsingh78/ContractSense

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py105 linesDownload Raw Back to root
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)