Spaces:
Sleeping
Sleeping
rafaldembski
commited on
Commit
•
d5e86a3
1
Parent(s):
1e27c56
Create pages/Analysis.py
Browse files- pages/Analysis.py +93 -0
pages/Analysis.py
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# pages/Analysis.py
|
2 |
+
|
3 |
+
import streamlit as st
|
4 |
+
from utils.functions import get_phone_info, simple_checks, analyze_message, update_stats
|
5 |
+
import os
|
6 |
+
|
7 |
+
def show_analysis():
|
8 |
+
st.header("📱 Analiza Fałszywych Wiadomości SMS")
|
9 |
+
st.write("Wprowadź treść wiadomości SMS oraz numer telefonu nadawcy, aby przeprowadzić analizę pod kątem potencjalnego oszustwa.")
|
10 |
+
|
11 |
+
with st.form("sms_form"):
|
12 |
+
message = st.text_area("Treść wiadomości SMS", height=150)
|
13 |
+
phone_number = st.text_input("Numer telefonu nadawcy (w formacie międzynarodowym, np. +48123123123)")
|
14 |
+
|
15 |
+
st.markdown("### Dodatkowe Informacje")
|
16 |
+
# Dodane pytania
|
17 |
+
frequency = st.selectbox(
|
18 |
+
"Jak często otrzymujesz wiadomości od tego numeru?",
|
19 |
+
('Pierwszy raz', 'Sporadycznie', 'Regularnie')
|
20 |
+
)
|
21 |
+
last_received = st.selectbox(
|
22 |
+
"Kiedy ostatnio otrzymałeś podobną wiadomość?",
|
23 |
+
('Dziś', 'W ciągu ostatniego tygodnia', 'W ciągu ostatniego miesiąca', 'Dłużej')
|
24 |
+
)
|
25 |
+
confidence_level = st.slider(
|
26 |
+
"Jak bardzo jesteś pewny, że wiadomość jest autentyczna?",
|
27 |
+
1, 5, 3,
|
28 |
+
help="1: Bardzo mało pewny, 5: Bardzo pewny"
|
29 |
+
)
|
30 |
+
unexpected = st.radio(
|
31 |
+
"Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?",
|
32 |
+
('Tak', 'Nie')
|
33 |
+
)
|
34 |
+
additional_notes = st.text_area("Dodatkowe uwagi lub informacje (opcjonalnie)", height=100)
|
35 |
+
|
36 |
+
submitted = st.form_submit_button("Analizuj wiadomość")
|
37 |
+
|
38 |
+
if submitted:
|
39 |
+
if not message.strip():
|
40 |
+
st.error("Proszę wprowadzić treść wiadomości.")
|
41 |
+
elif not phone_number.strip():
|
42 |
+
st.error("Proszę wprowadzić numer telefonu nadawcy.")
|
43 |
+
else:
|
44 |
+
# Informacje o numerze telefonu
|
45 |
+
country, operator = get_phone_info(phone_number)
|
46 |
+
if country and operator:
|
47 |
+
st.write(f"**Informacje o numerze telefonu:**")
|
48 |
+
st.write(f"- **Kraj:** {country}")
|
49 |
+
st.write(f"- **Operator:** {operator}")
|
50 |
+
else:
|
51 |
+
st.write("Nie udało się uzyskać informacji o numerze telefonu.")
|
52 |
+
|
53 |
+
# Heurystyczne sprawdzenia
|
54 |
+
warnings = simple_checks(message)
|
55 |
+
if warnings:
|
56 |
+
st.warning("Znaleziono następujące potencjalne czerwone flagi:")
|
57 |
+
for warn in warnings:
|
58 |
+
st.write(f"- {warn}")
|
59 |
+
|
60 |
+
# Zbierz dodatkowe informacje
|
61 |
+
additional_info = f"""
|
62 |
+
**Jak często otrzymujesz wiadomości od tego numeru?** {frequency}
|
63 |
+
**Kiedy ostatnio otrzymałeś podobną wiadomość?** {last_received}
|
64 |
+
**Jak bardzo jesteś pewny, że wiadomość jest autentyczna?** {confidence_level}/5
|
65 |
+
**Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?** {unexpected}
|
66 |
+
**Dodatkowe uwagi lub informacje:** {additional_notes}
|
67 |
+
"""
|
68 |
+
|
69 |
+
# Pobierz klucz API
|
70 |
+
api_key = os.getenv('SAMBANOVA_API_KEY')
|
71 |
+
if not api_key:
|
72 |
+
st.error("Brak klucza API. Ustaw zmienną środowiskową SAMBANOVA_API_KEY w ustawieniach aplikacji.")
|
73 |
+
else:
|
74 |
+
# Analiza za pomocą modelu AI
|
75 |
+
with st.spinner("Analizuję wiadomość przy użyciu modelu AI..."):
|
76 |
+
analysis_text, risk_text, recommendations_text = analyze_message(message, phone_number, additional_info, api_key)
|
77 |
+
st.subheader("📑 Analiza treści wiadomości:")
|
78 |
+
st.markdown(analysis_text)
|
79 |
+
st.subheader("⚠️ Ocena ryzyka oszustwa:")
|
80 |
+
st.markdown(risk_text)
|
81 |
+
st.subheader("✅ Zalecenia dla użytkownika:")
|
82 |
+
st.markdown(recommendations_text)
|
83 |
+
|
84 |
+
# Aktualizacja statystyk na podstawie oceny ryzyka
|
85 |
+
try:
|
86 |
+
risk_score = int(risk_text.split("/")[0].split(":")[-1].strip())
|
87 |
+
fraud_detected = risk_score >= 7 # Przykładowy próg
|
88 |
+
update_stats(fraud_detected=fraud_detected)
|
89 |
+
except:
|
90 |
+
pass
|
91 |
+
|
92 |
+
st.info("📌 Pamiętaj: zawsze zachowuj ostrożność przy otrzymywaniu wiadomości od nieznanych nadawców. Nie udostępniaj poufnych informacji i nie klikaj w podejrzane linki.")
|
93 |
+
|