samiee2213 commited on
Commit
2a97c19
Β·
verified Β·
1 Parent(s): 1045551

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +197 -194
app.py CHANGED
@@ -4,7 +4,6 @@ from streamlit_option_menu import option_menu
4
  import os
5
  import plotly.express as px
6
  from io import StringIO
7
- from langchain_google_genai import ChatGoogleGenerativeAI
8
  from langchain.schema import HumanMessage, SystemMessage, AIMessage
9
  from langchain.chat_models import AzureChatOpenAI, ChatOpenAI
10
  from langchain.memory import ConversationBufferWindowMemory
@@ -19,33 +18,30 @@ import pandas as pd
19
  import numpy as np
20
  from dotenv import load_dotenv
21
  import re
22
- #from auth0.v3.authentication import GetToken
23
- #from auth0.v3.management import Auth0
24
 
25
  warnings.filterwarnings("ignore", category=DeprecationWarning)
26
 
27
- client_id = os.getenv("client_id")
28
- client_secret = os.getenv("client_secret")
29
- auth_domain = os.getenv("auth_domain")
30
- GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
 
 
 
 
 
 
31
 
32
- llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro",temperature=0,api_key=GOOGLE_API_KEY,convert_system_message_to_human=True)
33
 
34
  # Streamlit page configuration
35
  st.set_page_config(
36
  page_title="TraffiTrack",
37
- page_icon="",
38
  layout="wide",
39
- initial_sidebar_state="expanded",
40
  )
41
 
42
- #token = GetToken(auth_domain)
43
- #mgmt_api_token = token.client_credentials(
44
- # client_id,
45
- # client_secret,
46
- # 'dev-u4kd3wndapfdk6dr.us.auth0.com'
47
- #)
48
- #auth0 = Auth0(auth_domain, mgmt_api_token['access_token'])
49
 
50
  # Initialize session state for messages and banned users
51
  if 'messages' not in st.session_state:
@@ -97,27 +93,16 @@ def check_for_drug_content(input_text):
97
  ip_addresses = re.findall(ip_pattern, input_text)
98
 
99
  return found_drugs, phone_numbers, ip_addresses
100
-
101
  # Sidebar with options
102
- selected = option_menu(
103
- "Main Menu",
104
- ["Home", "Registration","Chat"],
105
- icons=['house', 'person','chat-dots'],
106
- menu_icon="cast",
107
- default_index=0,
108
- orientation="horizontal",
109
- styles={
110
- "container": {"padding": "5px", "background-color": "#DEF9C4"},
111
- "icon": {"color": "#468585", "font-size": "25px"},
112
- "nav-link": {
113
- "font-size": "16px",
114
- "text-align": "left",
115
- "margin": "0px",
116
- "--hover-color": "#9CDBA6"
117
- },
118
- "nav-link-selected": {"background-color": "#50B498"},
119
- }
120
- )
121
 
122
 
123
  # Function to get a response from the chat model
@@ -230,6 +215,9 @@ def get_chatmodel_response(user_message):
230
  elif isinstance(message, AIMessage):
231
  st_message(message.content, is_user=False)
232
 
 
 
 
233
  def display_home_info():
234
  # Set background color
235
  st.markdown(
@@ -268,175 +256,190 @@ def display_home_info():
268
  """,
269
  unsafe_allow_html=True
270
  )
271
- # Login and Signup Buttons
272
- if "auth_token" not in st.session_state:
273
- st.write("#### Please login or sign up to access the application:")
274
- col1, col2 = st.columns(2)
275
-
276
- with col1:
277
- if st.button("Login"):
278
- login()
279
-
280
- with col2:
281
- if st.button("Sign Up"):
282
- signup()
283
- else:
284
- st.success("You're logged in!")
285
 
286
- if selected == "Registration":
287
- registration()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
 
289
- elif selected == "Home":
290
- display_home_info()
291
 
292
- elif selected == "Chat":
293
-
294
- def traffitrack_chatbot():
295
- st.title('TraffiTrack πŸ’¬')
296
-
297
- # Dropdown to select platform
298
- platform = st.selectbox(
299
- "Choose a platform",
300
- ["Live πŸ’β€β™€οΈ", "WhatsApp πŸ“±", "Instagram πŸ“Έ", "Telegram βœ‰οΈ"],
301
- index=0
302
- )
303
-
304
- if platform == "Telegram βœ‰οΈ":
305
- # Hardcoded CSV content
306
- csv_content = """sender_name,sender_id,phone_number,message_text
307
- Shruti,1580593004,917304814120,But I would prefer blowing a bag of Charlie
308
- Shruti,1580593004,917304814120,I want to eat ice cream i am bored
309
- Shruti,1580593004,917304814120,He’s heavily into smack
310
- Shruti,1580593004,917304814120,There was a bag of snow in the car
311
- Shruti,1580593004,917304814120,Did you bring the Mary Jane for the party tonight?
312
- Shruti,1580593004,917304814120,Mary Jane
313
- Ritika,1065437474,918828000465,I WANT A BAG OF CHARLIE
314
- Ritika,1065437474,918828000465,Okayy
315
- Preeyaj,6649015430,,Haa bhej cocain thoda
316
- Ritika,1065437474,918828000465,Maal chahiye?
317
- Preeyaj,6649015430,,Llm
318
- Ritika,1065437474,918828000465,Kya kar rahe ho?
319
- Ritika,1065437474,918828000465,Hey"""
320
-
321
- # Read the CSV content into a DataFrame
322
- messages_df = pd.read_csv(StringIO(csv_content))
323
- # Reverse the DataFrame to display messages from first to last
324
- for idx, row in messages_df[::-1].iterrows(): # Reverse the DataFrame here
325
- sender_name = row['sender_name']
326
- message_text = row['message_text']
327
- # Display each message with its corresponding sender name
328
- st_message(f"{sender_name}: {message_text}", is_user=False, key=f"telegram_message_{idx}")
329
-
330
- if st.button("Analyze 🚨"):
331
- # Initialize count and list for drug-related messages
332
- drug_count = 0
333
- drug_messages = []
334
- user_data = {} # Initialize user data dictionary
335
-
336
- # Analyze each message for drug-related content
337
- for idx, row in messages_df.iterrows():
338
- message_text = row['message_text']
339
  sender_name = row['sender_name']
340
- sender_id = row['sender_id'] # This will change with each message
341
- phone_number = row['phone_number']
342
-
343
- # Get response from the chat model
344
- response_content = get_chatmodel_response(message_text)
345
-
346
- # Check for drug word detected in the response
347
- if "drug word detected" in response_content and "none" not in response_content:
348
- drug_word = response_content.split("drug word detected: ")[1].strip()
349
- drug_count += 1
350
- drug_messages.append({
351
- "sender_name": sender_name,
352
- "sender_id": sender_id,
353
- "phone_number": phone_number,
354
- "message_text": message_text,
355
- "drug_word": drug_word
356
- })
357
- # Aggregate data by user
358
- if sender_name not in user_data:
359
- user_data[sender_name] = {
 
 
 
 
 
 
 
360
  "phone_number": phone_number,
361
- "sender_id": sender_id, # Store the sender_id here
362
- "message_count": 0,
363
- "drug_words": []
364
- }
365
- user_data[sender_name]["message_count"] += 1
366
- user_data[sender_name]["drug_words"].append(drug_word)
367
-
368
- # Display statistics
369
- st.subheader("Analysis Results πŸ“Š")
370
- st.write(f"Total drug-related messages detected: {drug_count}")
371
-
372
- if drug_count > 0:
373
- # Prepare data for visualization
374
- user_names = list(user_data.keys())
375
- message_counts = [data["message_count"] for data in user_data.values()]
376
- phone_numbers = [data["phone_number"] for data in user_data.values()]
377
- sender_ids = [data["sender_id"] for data in user_data.values()] # Use stored sender_id
378
-
379
- # 1. Bar chart: Messages per user
380
- st.markdown("### Number of Messages per User πŸ“Š")
381
- fig = px.bar(
382
- x=user_names,
383
- y=message_counts,
384
- labels={'x': 'User Name', 'y': 'Message Count'},
385
- title="Messages Detected per User"
386
- )
387
- st.plotly_chart(fig)
388
-
389
- # 2. Pie chart: Distribution of drug-related messages
390
- st.markdown("### Drug Distribution Among Users 🍰")
391
- drugs_detected = [drug for user in user_data.values() for drug in user["drug_words"]]
392
- fig = px.pie(
393
- names=drugs_detected,
394
- title="Distribution of Detected Drugs"
395
- )
396
- st.plotly_chart(fig)
397
-
398
- # 3. Display user details in a table
399
- st.markdown("### User Details Table πŸ“‹")
400
- user_df = pd.DataFrame({
401
- "User Name": user_names,
402
- "Phone Number": phone_numbers,
403
- "Sender ID": sender_ids, # Display the correct sender ID
404
- "Messages Detected": message_counts
405
- })
406
- st.dataframe(user_df)
407
-
408
- # Optionally: Link to the statistics page
409
- st.markdown("[View Statistics Page](#)")
410
- else:
411
- st.write("No drug-related messages detected.")
 
 
412
 
 
 
 
 
413
 
414
- else:
415
- # Display chat messages for other platforms with unique keys
416
- for idx, msg in enumerate(st.session_state.messages):
417
- st_message(msg["message"], is_user=msg["is_user"], key=f"message_{idx}")
418
 
419
- # Input for user query
420
- input_text = st.text_input("Enter your text", key="user_input")
 
 
 
 
 
421
 
422
- if st.button("Send"):
423
- if input_text:
424
- # Append the user's message to session state
425
- st.session_state.messages.append({"message": input_text, "is_user": True})
426
 
427
- # Get the response from the model
428
- response = get_chatmodel_response(input_text)
429
 
430
- # Append the response from the model
431
- st.session_state.messages.append({"message": response, "is_user": False})
432
 
433
- # Rerun to refresh the UI with new messages
434
- st.rerun()
435
- else:
436
- st.warning("Please enter a message.")
437
 
438
- # Call the chatbot function
439
- traffitrack_chatbot()
440
 
441
 
442
  # elif selected == "Statistics":
@@ -513,4 +516,4 @@ st.markdown(f"""
513
  padding: 10px;
514
  }}
515
  </style>
516
- """, unsafe_allow_html=True)
 
4
  import os
5
  import plotly.express as px
6
  from io import StringIO
 
7
  from langchain.schema import HumanMessage, SystemMessage, AIMessage
8
  from langchain.chat_models import AzureChatOpenAI, ChatOpenAI
9
  from langchain.memory import ConversationBufferWindowMemory
 
18
  import numpy as np
19
  from dotenv import load_dotenv
20
  import re
21
+ from auth0_component import login_button
 
22
 
23
  warnings.filterwarnings("ignore", category=DeprecationWarning)
24
 
25
+ load_dotenv()
26
+
27
+ # Auth0 credentials
28
+ clientId = os.getenv('client_id')
29
+ domain = os.getenv('auth_domain')
30
+ client_secret = os.getenv('client_secret')
31
+
32
+
33
+ GROQ_API_KEY = os.getenv("GROQ_API_KEY")
34
+ llm = ChatGroq(model="llama-3.1-70b-versatile")
35
 
 
36
 
37
  # Streamlit page configuration
38
  st.set_page_config(
39
  page_title="TraffiTrack",
40
+ page_icon=":mag:",
41
  layout="wide",
42
+ initial_sidebar_state="expanded",
43
  )
44
 
 
 
 
 
 
 
 
45
 
46
  # Initialize session state for messages and banned users
47
  if 'messages' not in st.session_state:
 
93
  ip_addresses = re.findall(ip_pattern, input_text)
94
 
95
  return found_drugs, phone_numbers, ip_addresses
 
96
  # Sidebar with options
97
+
98
+ st.title("Login")
99
+ email = st.text_input("Enter your email...")
100
+ password = st.text_input("Enter your password...",type='password')
101
+
102
+
103
+
104
+
105
+
 
 
 
 
 
 
 
 
 
 
106
 
107
 
108
  # Function to get a response from the chat model
 
215
  elif isinstance(message, AIMessage):
216
  st_message(message.content, is_user=False)
217
 
218
+
219
+
220
+
221
  def display_home_info():
222
  # Set background color
223
  st.markdown(
 
256
  """,
257
  unsafe_allow_html=True
258
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
 
260
+ user_info = login_button(clientId=clientId, domain=domain)
261
+ if user_info:
262
+ st.write(f'Hi {user_info["nickname"]}')
263
+ # Uncomment below if you want to show more user information
264
+ # st.write(user_info)
265
+ else:
266
+ st.write("Please log in to continue.")
267
+
268
+ if st.button("Login / SignUp"):
269
+ selected = option_menu(
270
+ "Main Menu",
271
+ ["Home","Registration","Chat"],
272
+
273
+ icons=['house', 'person','chat-dots'],
274
+ menu_icon="cast",
275
+ default_index=0,
276
+ orientation="horizontal",
277
+ styles={
278
+ "container": {"padding": "5px", "background-color": "#DEF9C4"},
279
+ "icon": {"color": "#468585", "font-size": "25px"},
280
+ "nav-link": {
281
+ "font-size": "16px",
282
+ "text-align": "left",
283
+ "margin": "0px",
284
+ "--hover-color": "#9CDBA6"
285
+ },
286
+ "nav-link-selected": {"background-color": "#50B498"},
287
+ }
288
+ )
289
+ if selected == "Registration":
290
+ registration()
291
 
292
+ elif selected == "Home":
293
+ display_home_info()
294
 
295
+ elif selected == "Chat":
296
+
297
+ def traffitrack_chatbot():
298
+ st.title('TraffiTrack πŸ’¬')
299
+
300
+ # Dropdown to select platform
301
+ platform = st.selectbox(
302
+ "Choose a platform",
303
+ ["Live πŸ’β€β™€οΈ", "WhatsApp πŸ“±", "Instagram πŸ“Έ", "Telegram βœ‰οΈ"],
304
+ index=0
305
+ )
306
+
307
+ if platform == "Telegram βœ‰οΈ":
308
+ # Hardcoded CSV content
309
+ csv_content = """sender_name,sender_id,phone_number,message_text
310
+ Shruti,1580593004,917304814120,But I would prefer blowing a bag of Charlie
311
+ Shruti,1580593004,917304814120,I want to eat ice cream i am bored
312
+ Shruti,1580593004,917304814120,He’s heavily into smack
313
+ Shruti,1580593004,917304814120,There was a bag of snow in the car
314
+ Shruti,1580593004,917304814120,Did you bring the Mary Jane for the party tonight?
315
+ Shruti,1580593004,917304814120,Mary Jane
316
+ Ritika,1065437474,918828000465,I WANT A BAG OF CHARLIE
317
+ Ritika,1065437474,918828000465,Okayy
318
+ Preeyaj,6649015430,,Haa bhej cocain thoda
319
+ Ritika,1065437474,918828000465,Maal chahiye?
320
+ Preeyaj,6649015430,,Llm
321
+ Ritika,1065437474,918828000465,Kya kar rahe ho?
322
+ Ritika,1065437474,918828000465,Hey"""
323
+
324
+ # Read the CSV content into a DataFrame
325
+ messages_df = pd.read_csv(StringIO(csv_content))
326
+ # Reverse the DataFrame to display messages from first to last
327
+ for idx, row in messages_df[::-1].iterrows(): # Reverse the DataFrame here
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  sender_name = row['sender_name']
329
+ message_text = row['message_text']
330
+ # Display each message with its corresponding sender name
331
+ st_message(f"{sender_name}: {message_text}", is_user=False, key=f"telegram_message_{idx}")
332
+
333
+ if st.button("Analyze 🚨"):
334
+ # Initialize count and list for drug-related messages
335
+ drug_count = 0
336
+ drug_messages = []
337
+ user_data = {} # Initialize user data dictionary
338
+
339
+ # Analyze each message for drug-related content
340
+ for idx, row in messages_df.iterrows():
341
+ message_text = row['message_text']
342
+ sender_name = row['sender_name']
343
+ sender_id = row['sender_id'] # This will change with each message
344
+ phone_number = row['phone_number']
345
+
346
+ # Get response from the chat model
347
+ response_content = get_chatmodel_response(message_text)
348
+
349
+ # Check for drug word detected in the response
350
+ if "drug word detected" in response_content and "none" not in response_content:
351
+ drug_word = response_content.split("drug word detected: ")[1].strip()
352
+ drug_count += 1
353
+ drug_messages.append({
354
+ "sender_name": sender_name,
355
+ "sender_id": sender_id,
356
  "phone_number": phone_number,
357
+ "message_text": message_text,
358
+ "drug_word": drug_word
359
+ })
360
+ # Aggregate data by user
361
+ if sender_name not in user_data:
362
+ user_data[sender_name] = {
363
+ "phone_number": phone_number,
364
+ "sender_id": sender_id, # Store the sender_id here
365
+ "message_count": 0,
366
+ "drug_words": []
367
+ }
368
+ user_data[sender_name]["message_count"] += 1
369
+ user_data[sender_name]["drug_words"].append(drug_word)
370
+
371
+ # Display statistics
372
+ st.subheader("Analysis Results πŸ“Š")
373
+ st.write(f"Total drug-related messages detected: {drug_count}")
374
+
375
+ if drug_count > 0:
376
+ # Prepare data for visualization
377
+ user_names = list(user_data.keys())
378
+ message_counts = [data["message_count"] for data in user_data.values()]
379
+ phone_numbers = [data["phone_number"] for data in user_data.values()]
380
+ sender_ids = [data["sender_id"] for data in user_data.values()] # Use stored sender_id
381
+
382
+ # 1. Bar chart: Messages per user
383
+ st.markdown("### Number of Messages per User πŸ“Š")
384
+ fig = px.bar(
385
+ x=user_names,
386
+ y=message_counts,
387
+ labels={'x': 'User Name', 'y': 'Message Count'},
388
+ title="Messages Detected per User"
389
+ )
390
+ st.plotly_chart(fig)
391
+
392
+ # 2. Pie chart: Distribution of drug-related messages
393
+ st.markdown("### Drug Distribution Among Users 🍰")
394
+ drugs_detected = [drug for user in user_data.values() for drug in user["drug_words"]]
395
+ fig = px.pie(
396
+ names=drugs_detected,
397
+ title="Distribution of Detected Drugs"
398
+ )
399
+ st.plotly_chart(fig)
400
+
401
+ # 3. Display user details in a table
402
+ st.markdown("### User Details Table πŸ“‹")
403
+ user_df = pd.DataFrame({
404
+ "User Name": user_names,
405
+ "Phone Number": phone_numbers,
406
+ "Sender ID": sender_ids, # Display the correct sender ID
407
+ "Messages Detected": message_counts
408
+ })
409
+ st.dataframe(user_df)
410
 
411
+ # Optionally: Link to the statistics page
412
+ st.markdown("[View Statistics Page](#)")
413
+ else:
414
+ st.write("No drug-related messages detected.")
415
 
 
 
 
 
416
 
417
+ else:
418
+ # Display chat messages for other platforms with unique keys
419
+ for idx, msg in enumerate(st.session_state.messages):
420
+ st_message(msg["message"], is_user=msg["is_user"], key=f"message_{idx}")
421
+
422
+ # Input for user query
423
+ input_text = st.text_input("Enter your text", key="user_input")
424
 
425
+ if st.button("Send"):
426
+ if input_text:
427
+ # Append the user's message to session state
428
+ st.session_state.messages.append({"message": input_text, "is_user": True})
429
 
430
+ # Get the response from the model
431
+ response = get_chatmodel_response(input_text)
432
 
433
+ # Append the response from the model
434
+ st.session_state.messages.append({"message": response, "is_user": False})
435
 
436
+ # Rerun to refresh the UI with new messages
437
+ st.rerun()
438
+ else:
439
+ st.warning("Please enter a message.")
440
 
441
+ # Call the chatbot function
442
+ traffitrack_chatbot()
443
 
444
 
445
  # elif selected == "Statistics":
 
516
  padding: 10px;
517
  }}
518
  </style>
519
+ """, unsafe_allow_html=True)