Seth0330 commited on
Commit
14dc418
·
verified ·
1 Parent(s): 66af604

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -5
app.py CHANGED
@@ -6,6 +6,7 @@ import sqlite3
6
  import json
7
  import numpy as np
8
  import datetime
 
9
  from langchain.chains import RetrievalQA
10
  from langchain.schema import Document
11
  from langchain_core.retrievers import BaseRetriever
@@ -37,19 +38,23 @@ uploaded_files = st.file_uploader(
37
  "Upload JSON files in batches (any structure)", type="json", accept_multiple_files=True
38
  )
39
 
40
- # --- Improved Flattening: extracts entity from emails/user fields for better matching
41
  def flatten_json_obj(obj, parent_key="", sep="."):
42
  items = {}
43
  if isinstance(obj, dict):
44
  for k, v in obj.items():
45
  new_key = f"{parent_key}{sep}{k}" if parent_key else k
46
- # Entity extraction: add name from email
47
  if (
48
  k.lower() in {"customer", "user", "email", "username"} and
49
  isinstance(v, str) and "@" in v
50
  ):
51
  local = v.split("@")[0]
52
- items[new_key + "_name"] = local
 
 
 
 
53
  items.update(flatten_json_obj(v, new_key, sep=sep))
54
  elif isinstance(obj, list):
55
  for i, v in enumerate(obj):
@@ -155,7 +160,6 @@ def python_fuzzy_match(user_query, top_k=5):
155
  results = []
156
  for row in cursor.fetchall():
157
  flat_text = row[4].lower()
158
- # score = # of query terms present as substring in the flat_text
159
  score = sum(any(term in flat_text for term in query_terms) for term in query_terms)
160
  if score > 0:
161
  results.append((score, row))
@@ -251,7 +255,6 @@ def send_message():
251
  return
252
  st.session_state.messages.append({"role": "user", "content": user_input})
253
  with st.spinner("Thinking..."):
254
- # Correct key: "query"
255
  result = qa_chain({"query": user_input})
256
  answer = result['result']
257
  st.session_state.messages.append({"role": "assistant", "content": answer})
 
6
  import json
7
  import numpy as np
8
  import datetime
9
+ import re
10
  from langchain.chains import RetrievalQA
11
  from langchain.schema import Document
12
  from langchain_core.retrievers import BaseRetriever
 
38
  "Upload JSON files in batches (any structure)", type="json", accept_multiple_files=True
39
  )
40
 
41
+ # --- Enhanced Flattening: extract names from emails/user fields for LLM context
42
  def flatten_json_obj(obj, parent_key="", sep="."):
43
  items = {}
44
  if isinstance(obj, dict):
45
  for k, v in obj.items():
46
  new_key = f"{parent_key}{sep}{k}" if parent_key else k
47
+ # Entity extraction: add name(s) from email/user
48
  if (
49
  k.lower() in {"customer", "user", "email", "username"} and
50
  isinstance(v, str) and "@" in v
51
  ):
52
  local = v.split("@")[0]
53
+ local_clean = re.sub(r'[^a-zA-Z0-9]', ' ', local)
54
+ parts = [part for part in local_clean.split() if part]
55
+ if parts:
56
+ items[new_key + "_name"] = parts[0]
57
+ items[new_key + "_all_names"] = " ".join(parts)
58
  items.update(flatten_json_obj(v, new_key, sep=sep))
59
  elif isinstance(obj, list):
60
  for i, v in enumerate(obj):
 
160
  results = []
161
  for row in cursor.fetchall():
162
  flat_text = row[4].lower()
 
163
  score = sum(any(term in flat_text for term in query_terms) for term in query_terms)
164
  if score > 0:
165
  results.append((score, row))
 
255
  return
256
  st.session_state.messages.append({"role": "user", "content": user_input})
257
  with st.spinner("Thinking..."):
 
258
  result = qa_chain({"query": user_input})
259
  answer = result['result']
260
  st.session_state.messages.append({"role": "assistant", "content": answer})