Komal133 commited on
Commit
e353374
·
verified ·
1 Parent(s): 6eba542

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -1
app.py CHANGED
@@ -114,4 +114,62 @@ def generate_heatmap(risk_scores):
114
  buffer.seek(0)
115
  return buffer
116
 
117
- def generate_pdf_report(results, heatmap
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  buffer.seek(0)
115
  return buffer
116
 
117
+ def generate_pdf_report(results, heatmap_buffer):
118
+ """Generate PDF report with summary and heatmap."""
119
+ buffer = BytesIO()
120
+ c = canvas.Canvas(buffer, pagesize=letter)
121
+ c.setFont("Helvetica", 12)
122
+ c.drawString(50, 750, "Contract Risk Analysis Report")
123
+
124
+ # Summary
125
+ c.drawString(50, 720, "Summary of Risk-Prone Clauses:")
126
+ y = 700
127
+ for result in results[:5]: # Limit to top 5 for brevity
128
+ text = f"Clause {result['clause_id']}: {result['clause_type'].capitalize()} (Risk: {result['risk_score']})"
129
+ c.drawString(50, y, text[:80] + "..." if len(text) > 80 else text)
130
+ y -= 20
131
+
132
+ # Embed heatmap
133
+ if heatmap_buffer:
134
+ c.drawImage(BytesIO(heatmap_buffer.read()), 50, y-200, width=500, height=100)
135
+
136
+ c.showPage()
137
+ c.save()
138
+ buffer.seek(0)
139
+ return buffer
140
+
141
+ def process_contract(pdf_file):
142
+ """Main function to process uploaded contract."""
143
+ # Extract text
144
+ text = extract_text_from_pdf(pdf_file)
145
+ if "Error" in text:
146
+ return text, None, None, {"Error": text}
147
+
148
+ # Parse and classify
149
+ results, risk_scores = parse_contract(text)
150
+ if not results:
151
+ return "No relevant clauses detected.", None, None, {"Summary": "No risk-prone clauses found."}
152
+
153
+ # Generate outputs
154
+ json_output = json.dumps(results, indent=2)
155
+ heatmap_buffer = generate_heatmap(risk_scores)
156
+ pdf_report = generate_pdf_report(results, heatmap_buffer)
157
+
158
+ return json_output, heatmap_buffer, pdf_report, {"Summary": f"Detected {len(results)} risk-prone clauses."}
159
+
160
+ # Gradio interface
161
+ iface = gr.Interface(
162
+ fn=process_contract,
163
+ inputs=gr.File(label="Upload Contract PDF"),
164
+ outputs=[
165
+ gr.Textbox(label="JSON Output"),
166
+ gr.Image(label="Risk Heatmap"),
167
+ gr.File(label="Download PDF Report"),
168
+ gr.JSON(label="Summary")
169
+ ],
170
+ title="Contract Risk Analyzer",
171
+ description="Upload a contract PDF to analyze risk-prone clauses and visualize results."
172
+ )
173
+
174
+ if __name__ == "__main__":
175
+ iface.launch()