# app.py import gradio as gr import os from utils.parser import parse_file from utils.summarizer import summarize_text from utils.metadata import extract_metadata from utils.risk_detector import detect_risks from utils.fallback_suggester import suggest_fallback from utils.translator import translate_text def handle_input(file, raw_text): if file is not None: content = parse_file(file.name) elif raw_text.strip() != "": content = raw_text else: return "Please upload a contract or paste text.", "", {}, [], "", "" return content, "", {}, [], "", "" with gr.Blocks(title="SYNCLM – AI Contract Intelligence Demo") as demo: gr.Markdown( """
🚀 Innovation Meets Intelligence
Upload a contract or paste the text. SYNCLM will analyze, summarize, extract metadata, detect risks, suggest fallback clauses, and even translate key sections.
""" ) with gr.Row(): file_input = gr.File(label="📄 Upload Contract (.pdf, .docx, .txt)", file_types=[".pdf", ".docx", ".txt"]) text_input = gr.Textbox(label="✍️ Or Paste Contract Text", lines=10, placeholder="Paste contract text here...") parse_btn = gr.Button("📂 Parse Contract") contract_display = gr.Textbox(label="📃 Parsed Contract", lines=20) with gr.Row(): summarize_btn = gr.Button("📝 Summarize") metadata_btn = gr.Button("📅 Extract Metadata") risk_btn = gr.Button("⚠️ Detect Risks") fallback_btn = gr.Button("🛡️ Suggest Fallback") translate_btn = gr.Button("🌍 Translate to Portuguese") summary_output = gr.Textbox(label="📝 Executive Summary", lines=6) metadata_output = gr.JSON(label="📋 Extracted Metadata") risk_output = gr.Dataframe(label="🚩 Risky Clauses", headers=["Clause Type", "Confidence"], datatype=["str", "number"]) fallback_output = gr.Textbox(label="💡 Suggested Fallback Clause", lines=4) translation_output = gr.Textbox(label="🌐 Portuguese Translation", lines=10) # Action Buttons parse_btn.click( fn=handle_input, inputs=[file_input, text_input], outputs=[contract_display, summary_output, metadata_output, risk_output, fallback_output, translation_output] ) summarize_btn.click(fn=summarize_text, inputs=[contract_display], outputs=[summary_output]) metadata_btn.click(fn=extract_metadata, inputs=[contract_display], outputs=[metadata_output]) risk_btn.click(fn=detect_risks, inputs=[contract_display], outputs=[risk_output]) fallback_btn.click(fn=suggest_fallback, inputs=[contract_display], outputs=[fallback_output]) translate_btn.click(fn=translate_text, inputs=[contract_display], outputs=[translation_output]) if __name__ == "__main__": demo.launch()