tejash300 commited on
Commit
48677df
·
verified ·
1 Parent(s): 924cc4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py CHANGED
@@ -4,6 +4,7 @@ os.environ["XDG_CACHE_HOME"] = "/tmp"
4
  os.makedirs("/tmp/matplotlib", exist_ok=True)
5
  os.makedirs("/tmp/data", exist_ok=True)
6
  os.makedirs("/tmp/models_cache", exist_ok=True)
 
7
  from fastapi import FastAPI
8
  import io
9
  import time
@@ -12,6 +13,9 @@ import tempfile
12
  import numpy as np
13
  import matplotlib.pyplot as plt
14
  import pdfplumber
 
 
 
15
  import spacy
16
  import torch
17
  import sqlite3
@@ -491,6 +495,8 @@ def process_audio_to_text(audio_file_path):
491
 
492
  def extract_named_entities(text):
493
  """Extracts named entities from legal text."""
 
 
494
  max_length = 10000
495
  entities = []
496
  for i in range(0, len(text), max_length):
@@ -519,6 +525,8 @@ def extract_context_for_risk_terms(text, risk_keywords, window=1):
519
  """
520
  Extracts and summarizes the context around risk terms.
521
  """
 
 
522
  doc = nlp(text)
523
  sentences = list(doc.sents)
524
  risk_contexts = {category: [] for category in risk_keywords}
@@ -1406,7 +1414,122 @@ async def paypal_webhook(request: Request):
1406
  logger.error(f"Webhook processing error: {str(e)}")
1407
  # Return 200 even on error to acknowledge receipt to PayPal
1408
  return {"status": "error", "message": str(e)}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1410
  # Add this to your startup code
1411
  @app.on_event("startup")
1412
  async def startup_event():
 
4
  os.makedirs("/tmp/matplotlib", exist_ok=True)
5
  os.makedirs("/tmp/data", exist_ok=True)
6
  os.makedirs("/tmp/models_cache", exist_ok=True)
7
+ os.makedirs("/tmp/static", exist_ok=True)
8
  from fastapi import FastAPI
9
  import io
10
  import time
 
13
  import numpy as np
14
  import matplotlib.pyplot as plt
15
  import pdfplumber
16
+ from fastapi.responses import FileResponse, HTMLResponse
17
+ import pandas as pd
18
+ import plotly.express as px
19
  import spacy
20
  import torch
21
  import sqlite3
 
495
 
496
  def extract_named_entities(text):
497
  """Extracts named entities from legal text."""
498
+ if nlp is None:
499
+ return [{"entity": "NLP model not available", "label": "N/A"}]
500
  max_length = 10000
501
  entities = []
502
  for i in range(0, len(text), max_length):
 
525
  """
526
  Extracts and summarizes the context around risk terms.
527
  """
528
+ if nlp is None or summarizer is None:
529
+ return {category: "NLP/summarizer model not available" for category in risk_keywords}
530
  doc = nlp(text)
531
  sentences = list(doc.sents)
532
  risk_contexts = {category: [] for category in risk_keywords}
 
1414
  logger.error(f"Webhook processing error: {str(e)}")
1415
  # Return 200 even on error to acknowledge receipt to PayPal
1416
  return {"status": "error", "message": str(e)}
1417
+ @app.get("/download_risk_chart")
1418
+ async def download_risk_chart():
1419
+ """Generate and return a risk assessment chart as an image file."""
1420
+ try:
1421
+ risk_scores = {
1422
+ "Liability": 11,
1423
+ "Termination": 12,
1424
+ "Indemnification": 10,
1425
+ "Payment Risk": 41,
1426
+ "Insurance": 71
1427
+ }
1428
+ plt.figure(figsize=(8, 5))
1429
+ plt.bar(risk_scores.keys(), risk_scores.values(), color='red')
1430
+ plt.xlabel("Risk Categories")
1431
+ plt.ylabel("Risk Score")
1432
+ plt.title("Legal Risk Assessment")
1433
+ plt.xticks(rotation=30)
1434
+ risk_chart_path = os.path.join(STATIC_DIR, "risk_chart.png")
1435
+ plt.savefig(risk_chart_path)
1436
+ plt.close()
1437
+ return FileResponse(risk_chart_path, media_type="image/png", filename="risk_chart.png")
1438
+ except Exception as e:
1439
+ raise HTTPException(status_code=500, detail=f"Error generating risk chart: {str(e)}")
1440
+
1441
+ @app.get("/download_risk_pie_chart")
1442
+ async def download_risk_pie_chart():
1443
+ try:
1444
+ risk_scores = {
1445
+ "Liability": 11,
1446
+ "Termination": 12,
1447
+ "Indemnification": 10,
1448
+ "Payment Risk": 41,
1449
+ "Insurance": 71
1450
+ }
1451
+ plt.figure(figsize=(6, 6))
1452
+ plt.pie(risk_scores.values(), labels=risk_scores.keys(), autopct='%1.1f%%', startangle=90)
1453
+ plt.title("Legal Risk Distribution")
1454
+ pie_chart_path = os.path.join(STATIC_DIR, "risk_pie_chart.png")
1455
+ plt.savefig(pie_chart_path)
1456
+ plt.close()
1457
+ return FileResponse(pie_chart_path, media_type="image/png", filename="risk_pie_chart.png")
1458
+ except Exception as e:
1459
+ raise HTTPException(status_code=500, detail=f"Error generating pie chart: {str(e)}")
1460
 
1461
+ @app.get("/download_risk_radar_chart")
1462
+ async def download_risk_radar_chart():
1463
+ try:
1464
+ risk_scores = {
1465
+ "Liability": 11,
1466
+ "Termination": 12,
1467
+ "Indemnification": 10,
1468
+ "Payment Risk": 41,
1469
+ "Insurance": 71
1470
+ }
1471
+ categories = list(risk_scores.keys())
1472
+ values = list(risk_scores.values())
1473
+ categories += categories[:1]
1474
+ values += values[:1]
1475
+ angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
1476
+ angles += angles[:1]
1477
+ fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
1478
+ ax.plot(angles, values, 'o-', linewidth=2)
1479
+ ax.fill(angles, values, alpha=0.25)
1480
+ ax.set_thetagrids(np.degrees(angles[:-1]), categories)
1481
+ ax.set_title("Legal Risk Radar Chart", y=1.1)
1482
+ radar_chart_path = os.path.join(STATIC_DIR, "risk_radar_chart.png")
1483
+ plt.savefig(radar_chart_path)
1484
+ plt.close()
1485
+ return FileResponse(radar_chart_path, media_type="image/png", filename="risk_radar_chart.png")
1486
+ except Exception as e:
1487
+ raise HTTPException(status_code=500, detail=f"Error generating radar chart: {str(e)}")
1488
+
1489
+ @app.get("/download_risk_trend_chart")
1490
+ async def download_risk_trend_chart():
1491
+ try:
1492
+ dates = ["2025-01-01", "2025-02-01", "2025-03-01", "2025-04-01"]
1493
+ risk_history = {
1494
+ "Liability": [10, 12, 11, 13],
1495
+ "Termination": [12, 15, 14, 13],
1496
+ "Indemnification": [9, 10, 11, 10],
1497
+ "Payment Risk": [40, 42, 41, 43],
1498
+ "Insurance": [70, 69, 71, 72]
1499
+ }
1500
+ plt.figure(figsize=(10, 6))
1501
+ for category, scores in risk_history.items():
1502
+ plt.plot(dates, scores, marker='o', label=category)
1503
+ plt.xlabel("Date")
1504
+ plt.ylabel("Risk Score")
1505
+ plt.title("Historical Legal Risk Trends")
1506
+ plt.xticks(rotation=45)
1507
+ plt.legend()
1508
+ trend_chart_path = os.path.join(STATIC_DIR, "risk_trend_chart.png")
1509
+ plt.savefig(trend_chart_path, bbox_inches="tight")
1510
+ plt.close()
1511
+ return FileResponse(trend_chart_path, media_type="image/png", filename="risk_trend_chart.png")
1512
+ except Exception as e:
1513
+ raise HTTPException(status_code=500, detail=f"Error generating trend chart: {str(e)}")
1514
+
1515
+ @app.get("/interactive_risk_chart", response_class=HTMLResponse)
1516
+ async def interactive_risk_chart():
1517
+ try:
1518
+ risk_scores = {
1519
+ "Liability": 11,
1520
+ "Termination": 12,
1521
+ "Indemnification": 10,
1522
+ "Payment Risk": 41,
1523
+ "Insurance": 71
1524
+ }
1525
+ df = pd.DataFrame({
1526
+ "Risk Category": list(risk_scores.keys()),
1527
+ "Risk Score": list(risk_scores.values())
1528
+ })
1529
+ fig = px.bar(df, x="Risk Category", y="Risk Score", title="Interactive Legal Risk Assessment")
1530
+ return fig.to_html()
1531
+ except Exception as e:
1532
+ raise HTTPException(status_code=500, detail=f"Error generating interactive chart: {str(e)}")
1533
  # Add this to your startup code
1534
  @app.on_event("startup")
1535
  async def startup_event():