rawsun007 commited on
Commit
1ff47dc
·
1 Parent(s): 323e55b

code update in app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -70
app.py CHANGED
@@ -3,14 +3,10 @@ from transformers import AutoTokenizer, AutoModelForCausalLM
3
  import torch
4
  import json
5
  import re
6
- from fastapi import FastAPI
7
- import uvicorn
8
 
9
  MODEL_ID = "rawsun00001/banking-sms-json-parser-v6-merged"
10
 
11
- # -------------------------------
12
- # 1. Load model & tokenizer
13
- # -------------------------------
14
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
15
  model = AutoModelForCausalLM.from_pretrained(
16
  MODEL_ID,
@@ -19,11 +15,11 @@ model = AutoModelForCausalLM.from_pretrained(
19
  )
20
  if tokenizer.pad_token is None:
21
  tokenizer.pad_token = tokenizer.eos_token
 
22
 
23
-
24
- def parse_banking_sms(raw_text):
25
- sms = " ".join(raw_text.split())
26
- prompt = sms + "|"
27
  inputs = tokenizer(prompt, return_tensors="pt")
28
  if torch.cuda.is_available():
29
  inputs = {k: v.cuda() for k, v in inputs.items()}
@@ -34,14 +30,14 @@ def parse_banking_sms(raw_text):
34
  do_sample=False,
35
  repetition_penalty=1.05,
36
  pad_token_id=tokenizer.eos_token_id,
37
- eos_token_id=tokenizer.eos_token_id
38
  )
39
  decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
40
  json_part = decoded[len(prompt):].strip()
41
- match = re.search(r"\{[^{}]+\}", json_part)
42
- if match:
43
  try:
44
- parsed = json.loads(match.group())
45
  return {
46
  "date": parsed.get("date"),
47
  "type": parsed.get("type"),
@@ -53,68 +49,48 @@ def parse_banking_sms(raw_text):
53
  except json.JSONDecodeError:
54
  pass
55
  return {
56
- "date": None, "type": None, "amount": None,
57
- "category": None, "last4": None, "is_transaction": False
 
58
  }
59
 
60
-
61
- def chatbot_response(user_msg, history):
62
- # 🛠 Fix: history must always be a list (Gradio v5 validation expects list of dicts)
63
- if not isinstance(history, list):
64
- history = []
65
-
66
- res = parse_banking_sms(user_msg)
67
- if res["is_transaction"]:
68
- assistant_msg = (
69
  f"✅ Transaction Detected!\n\n"
70
- f"📅 Date: {res['date']}\n"
71
- f"💳 Type: {res['type'].title() if res['type'] else 'N/A'}\n"
72
- f"💰 Amount: {res['amount']}\n"
73
- f"🏪 Category: {res['category']}\n"
74
- f"🔢 Last 4 Digits: {res['last4']}\n\n"
75
- f"**Full JSON:**\n```json\n{json.dumps(res, indent=2)}\n```"
 
76
  )
77
  else:
78
- assistant_msg = (
79
- "ℹ️ Non-Transaction Message\n\n"
80
- "This appears to be a promotional or informational SMS or email.\n\n"
81
- f"**Classification JSON:**\n```json\n{json.dumps(res, indent=2)}\n```"
82
  )
83
-
84
- # Update history
85
- history.append({"role": "user", "content": user_msg})
86
- history.append({"role": "assistant", "content": assistant_msg})
87
-
88
- return history, ""
89
-
90
-
91
- # -------------------------------
92
- # 4. Gradio UI
93
- # -------------------------------
94
- with gr.Blocks() as demo:
95
- gr.Markdown("""
96
- ## 🏦 Banking SMS JSON Parser
97
-
98
- Paste your banking SMS or email below. The bot will extract structured transaction JSON.
99
- """)
100
-
101
- chatbot_ui = gr.Chatbot(type="messages", value=[])
102
- msg_txt = gr.Textbox(lines=3, placeholder="Paste SMS here…", label="Input SMS")
103
-
104
- msg_txt.submit(
105
- fn=chatbot_response,
106
- inputs=[msg_txt, chatbot_ui],
107
- outputs=[chatbot_ui, msg_txt]
108
- )
109
- msg_txt.submit(lambda _: "", None, msg_txt)
110
-
111
- gr.Markdown(f"---\n**Model ID:** `{MODEL_ID}`")
112
-
113
- # -------------------------------
114
- # 5. Mount with FastAPI
115
- # -------------------------------
116
- app = FastAPI()
117
- app.mount("/", demo)
118
 
119
  if __name__ == "__main__":
120
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
3
  import torch
4
  import json
5
  import re
 
 
6
 
7
  MODEL_ID = "rawsun00001/banking-sms-json-parser-v6-merged"
8
 
9
+ print("🔄 Loading banking‑SMS JSON parser model...")
 
 
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
11
  model = AutoModelForCausalLM.from_pretrained(
12
  MODEL_ID,
 
15
  )
16
  if tokenizer.pad_token is None:
17
  tokenizer.pad_token = tokenizer.eos_token
18
+ print("✅ Model loaded successfully!")
19
 
20
+ def parse_banking_sms(raw_text: str) -> dict:
21
+ sms_text = " ".join(raw_text.strip().split())
22
+ prompt = sms_text + "|"
 
23
  inputs = tokenizer(prompt, return_tensors="pt")
24
  if torch.cuda.is_available():
25
  inputs = {k: v.cuda() for k, v in inputs.items()}
 
30
  do_sample=False,
31
  repetition_penalty=1.05,
32
  pad_token_id=tokenizer.eos_token_id,
33
+ eos_token_id=tokenizer.eos_token_id,
34
  )
35
  decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
36
  json_part = decoded[len(prompt):].strip()
37
+ m = re.search(r"\{[^{}]+\}", json_part)
38
+ if m:
39
  try:
40
+ parsed = json.loads(m.group())
41
  return {
42
  "date": parsed.get("date"),
43
  "type": parsed.get("type"),
 
49
  except json.JSONDecodeError:
50
  pass
51
  return {
52
+ "date": None, "type": None,
53
+ "amount": None, "category": None,
54
+ "last4": None, "is_transaction": False
55
  }
56
 
57
+ def predict(raw_text: str) -> str:
58
+ parsed = parse_banking_sms(raw_text)
59
+ if parsed["is_transaction"]:
60
+ summary = (
 
 
 
 
 
61
  f"✅ Transaction Detected!\n\n"
62
+ f"- 📅 Date: **{parsed.get('date', 'N/A')}**\n"
63
+ f"- 💳 Type: **{parsed.get('type', '').title()}**\n"
64
+ f"- 💰 Amount: **{parsed.get('amount')}**\n"
65
+ f"- 🏪 Category: **{parsed.get('category')}**\n"
66
+ f"- 🔢 Last 4 Digits: **{parsed.get('last4')}**\n\n"
67
+ "**Full Parsed JSON:**\n```json\n"
68
+ f"{json.dumps(parsed, indent=2)}\n```"
69
  )
70
  else:
71
+ summary = (
72
+ "ℹ️ Non‑transactional SMS / Promotional / Info message.\n\n"
73
+ "**Parsed Classification JSON:**\n```json\n"
74
+ f"{json.dumps(parsed, indent=2)}\n```"
75
  )
76
+ return summary
77
+
78
+ iface = gr.Interface(
79
+ fn=predict,
80
+ inputs=gr.Textbox(
81
+ lines=3,
82
+ placeholder="Paste your banking SMS or email here…",
83
+ label="Input SMS / Email"
84
+ ),
85
+ outputs=gr.Markdown(label="Parsed Output"),
86
+ title="🏦 Banking SMS JSON Parser",
87
+ description=(
88
+ "Paste any banking SMS (or email) below — the app will detect transaction "
89
+ "vs non-transaction, and display structured JSON output."
90
+ ),
91
+ allow_flagging="never",
92
+ analytics_enabled=False, # disable Gradio telemetry in Spaces
93
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  if __name__ == "__main__":
96
+ iface.launch(server_name="0.0.0.0", server_port=7860)