Spaces:
Sleeping
Sleeping
rafaldembski
commited on
Commit
•
80583a7
1
Parent(s):
64db32c
Update pages/Analysis.py
Browse files- pages/Analysis.py +132 -87
pages/Analysis.py
CHANGED
@@ -8,124 +8,175 @@ from utils.functions import (
|
|
8 |
add_fake_number,
|
9 |
is_fake_number,
|
10 |
update_stats,
|
11 |
-
add_to_history
|
|
|
12 |
)
|
|
|
|
|
13 |
|
14 |
# Definiowanie tłumaczeń dla tej podstrony
|
15 |
page_translations = {
|
16 |
'Polish': {
|
17 |
'header': "📊 Analiza SMS",
|
18 |
-
'content': """Tutaj znajduje się interfejs do analizy wiadomości SMS. Wprowadź treść wiadomości
|
19 |
'input_placeholder': "Wprowadź treść SMS...",
|
20 |
-
'
|
|
|
21 |
'result_positive': "Ostrzeżenie: Wiadomość może być oszustwem!",
|
22 |
'result_negative': "Wiadomość wydaje się być bezpieczna.",
|
23 |
'report_button': "Zgłoś numer jako oszustwo",
|
24 |
-
'history_header': "Historia Analiz"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
},
|
26 |
'German': {
|
27 |
'header': "📊 SMS-Analyse",
|
28 |
-
'content': """Hier befindet sich die Benutzeroberfläche zur Analyse von SMS-Nachrichten. Geben Sie den Text der Nachricht
|
29 |
'input_placeholder': "Geben Sie den SMS-Inhalt ein...",
|
30 |
-
'
|
|
|
31 |
'result_positive': "Warnung: Die Nachricht könnte ein Betrug sein!",
|
32 |
'result_negative': "Die Nachricht scheint sicher zu sein.",
|
33 |
'report_button': "Nummer als Betrug melden",
|
34 |
-
'history_header': "Analyseverlauf"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
},
|
36 |
'English': {
|
37 |
'header': "📊 SMS Analysis",
|
38 |
-
'content': """Here is the interface for analyzing SMS messages. Enter the content
|
39 |
'input_placeholder': "Enter SMS content...",
|
40 |
-
'
|
|
|
41 |
'result_positive': "Warning: The message may be a fraud!",
|
42 |
'result_negative': "The message appears to be safe.",
|
43 |
-
'report_button': "Report
|
44 |
-
'history_header': "Analysis History"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
}
|
47 |
|
48 |
-
def
|
49 |
-
|
50 |
-
st.
|
|
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
elif language == 'German':
|
65 |
-
st.warning("Bitte geben Sie den Nachrichtentext ein.")
|
66 |
-
else:
|
67 |
-
st.warning("Please enter the message content.")
|
68 |
else:
|
69 |
-
#
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
if not country:
|
76 |
-
if language == 'Polish':
|
77 |
-
st.error("Nieprawidłowy numer telefonu.")
|
78 |
-
elif language == 'German':
|
79 |
-
st.error("Ungültige Telefonnummer.")
|
80 |
-
else:
|
81 |
-
st.error("Invalid phone number.")
|
82 |
else:
|
83 |
-
|
84 |
-
warnings = simple_checks(sms_content)
|
85 |
-
for warning in warnings:
|
86 |
-
st.warning(warning)
|
87 |
-
|
88 |
-
# Analiza wiadomości
|
89 |
-
additional_info = f"Kraj: {country}, Operator: {operator}"
|
90 |
-
analysis, risk, recommendations = analyze_message(sms_content, phone_number, additional_info, os.getenv('SAMBANOVA_API_KEY'))
|
91 |
|
92 |
-
|
93 |
-
|
|
|
|
|
|
|
|
|
94 |
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
|
98 |
-
|
99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
|
105 |
-
|
106 |
-
|
107 |
|
108 |
-
|
109 |
-
if fraud_detected:
|
110 |
-
if st.button(page_translations[language]['report_button']):
|
111 |
-
success = add_fake_number(phone_number)
|
112 |
-
if success:
|
113 |
-
if language == 'Polish':
|
114 |
-
st.success("Numer został zgłoszony jako oszustwo.")
|
115 |
-
elif language == 'German':
|
116 |
-
st.success("Nummer wurde als Betrug gemeldet.")
|
117 |
-
else:
|
118 |
-
st.success("Number reported as fraud.")
|
119 |
-
else:
|
120 |
-
if language == 'Polish':
|
121 |
-
st.info("Numer został już zgłoszony jako oszustwo.")
|
122 |
-
elif language == 'German':
|
123 |
-
st.info("Nummer wurde bereits als Betrug gemeldet.")
|
124 |
-
else:
|
125 |
-
st.info("Number has already been reported as fraud.")
|
126 |
|
127 |
# Wyświetlanie historii analiz
|
128 |
-
st.subheader(
|
129 |
history = get_history()
|
130 |
if history:
|
131 |
for entry in reversed(history[-5:]): # Wyświetl ostatnie 5 analiz
|
@@ -135,11 +186,5 @@ def main(language):
|
|
135 |
st.write(f"**Ocena Ryzyka:** {entry['risk_assessment']}")
|
136 |
st.write(f"**Zalecenia:** {entry['recommendations']}")
|
137 |
else:
|
138 |
-
|
139 |
-
|
140 |
-
elif language == 'German':
|
141 |
-
st.info("Keine Analysehistorie vorhanden.")
|
142 |
-
else:
|
143 |
-
st.info("No analysis history available.")
|
144 |
-
|
145 |
-
# Nie dodawaj "if __name__ == '__main__':" w podstronach
|
|
|
8 |
add_fake_number,
|
9 |
is_fake_number,
|
10 |
update_stats,
|
11 |
+
add_to_history,
|
12 |
+
get_history
|
13 |
)
|
14 |
+
import os
|
15 |
+
import re # Dodany import do obsługi wyrażeń regularnych
|
16 |
|
17 |
# Definiowanie tłumaczeń dla tej podstrony
|
18 |
page_translations = {
|
19 |
'Polish': {
|
20 |
'header': "📊 Analiza SMS",
|
21 |
+
'content': """Tutaj znajduje się interfejs do analizy wiadomości SMS. Wprowadź treść wiadomości oraz numer telefonu nadawcy, aby sprawdzić, czy jest ona potencjalnym oszustwem.""",
|
22 |
'input_placeholder': "Wprowadź treść SMS...",
|
23 |
+
'phone_input_label': "Numer telefonu nadawcy (w formacie międzynarodowym, np. +48123123123)",
|
24 |
+
'analyze_button': "Analizuj wiadomość",
|
25 |
'result_positive': "Ostrzeżenie: Wiadomość może być oszustwem!",
|
26 |
'result_negative': "Wiadomość wydaje się być bezpieczna.",
|
27 |
'report_button': "Zgłoś numer jako oszustwo",
|
28 |
+
'history_header': "Historia Analiz",
|
29 |
+
'no_history': "Brak historii analiz.",
|
30 |
+
'invalid_api_key': "Brak klucza API. Ustaw zmienną środowiskową SAMBANOVA_API_KEY w ustawieniach aplikacji.",
|
31 |
+
'info_reminder': "📌 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.",
|
32 |
+
'error_message_empty': "Proszę wprowadzić treść wiadomości.",
|
33 |
+
'error_phone_empty': "Proszę wprowadzić numer telefonu nadawcy.",
|
34 |
+
'invalid_phone': "Nieprawidłowy numer telefonu.",
|
35 |
+
'already_reported': "Numer został już zgłoszony jako oszustwo."
|
36 |
},
|
37 |
'German': {
|
38 |
'header': "📊 SMS-Analyse",
|
39 |
+
'content': """Hier befindet sich die Benutzeroberfläche zur Analyse von SMS-Nachrichten. Geben Sie den Text der Nachricht sowie die Telefonnummer des Absenders ein, um zu überprüfen, ob es sich um einen potenziellen Betrugsversuch handelt.""",
|
40 |
'input_placeholder': "Geben Sie den SMS-Inhalt ein...",
|
41 |
+
'phone_input_label': "Telefonnummer des Absenders (im internationalen Format, z.B. +49123123123)",
|
42 |
+
'analyze_button': "Nachricht analysieren",
|
43 |
'result_positive': "Warnung: Die Nachricht könnte ein Betrug sein!",
|
44 |
'result_negative': "Die Nachricht scheint sicher zu sein.",
|
45 |
'report_button': "Nummer als Betrug melden",
|
46 |
+
'history_header': "Analyseverlauf",
|
47 |
+
'no_history': "Keine Analysehistorie vorhanden.",
|
48 |
+
'invalid_api_key': "Fehlender API-Schlüssel. Setzen Sie die Umgebungsvariable SAMBANOVA_API_KEY in den App-Einstellungen.",
|
49 |
+
'info_reminder': "📌 Erinnerung: Seien Sie immer vorsichtig beim Empfang von Nachrichten von unbekannten Absendern. Teilen Sie keine vertraulichen Informationen und klicken Sie nicht auf verdächtige Links.",
|
50 |
+
'error_message_empty': "Bitte geben Sie den Nachrichtentext ein.",
|
51 |
+
'error_phone_empty': "Bitte geben Sie die Telefonnummer des Absenders ein.",
|
52 |
+
'invalid_phone': "Ungültige Telefonnummer.",
|
53 |
+
'already_reported': "Nummer wurde bereits als Betrug gemeldet."
|
54 |
},
|
55 |
'English': {
|
56 |
'header': "📊 SMS Analysis",
|
57 |
+
'content': """Here is the interface for analyzing SMS messages. Enter the message content and the sender's phone number to check if it is a potential fraud attempt.""",
|
58 |
'input_placeholder': "Enter SMS content...",
|
59 |
+
'phone_input_label': "Sender's Phone Number (in international format, e.g., +123123123123)",
|
60 |
+
'analyze_button': "Analyze Message",
|
61 |
'result_positive': "Warning: The message may be a fraud!",
|
62 |
'result_negative': "The message appears to be safe.",
|
63 |
+
'report_button': "Report Number as Fraud",
|
64 |
+
'history_header': "Analysis History",
|
65 |
+
'no_history': "No analysis history available.",
|
66 |
+
'invalid_api_key': "Missing API key. Set the SAMBANOVA_API_KEY environment variable in the app settings.",
|
67 |
+
'info_reminder': "📌 Reminder: Always exercise caution when receiving messages from unknown senders. Do not share confidential information and avoid clicking on suspicious links.",
|
68 |
+
'error_message_empty': "Please enter the message content.",
|
69 |
+
'error_phone_empty': "Please enter the sender's phone number.",
|
70 |
+
'invalid_phone': "Invalid phone number.",
|
71 |
+
'already_reported': "Number has already been reported as fraud."
|
72 |
}
|
73 |
}
|
74 |
|
75 |
+
def show_analysis(language):
|
76 |
+
translations = page_translations.get(language, page_translations['Polish']) # Domyślnie Polish
|
77 |
+
st.header(translations['header'])
|
78 |
+
st.write(translations['content'])
|
79 |
|
80 |
+
with st.form("sms_form"):
|
81 |
+
message = st.text_area("Treść wiadomości SMS", placeholder=translations['input_placeholder'], height=150)
|
82 |
+
phone_number = st.text_input("Numer telefonu nadawcy", placeholder=translations['phone_input_label'])
|
83 |
+
|
84 |
+
st.markdown("### Dodatkowe Informacje")
|
85 |
+
# Dodane pytania
|
86 |
+
frequency = st.selectbox(
|
87 |
+
"Jak często otrzymujesz wiadomości od tego numeru?",
|
88 |
+
('Pierwszy raz', 'Sporadycznie', 'Regularnie')
|
89 |
+
)
|
90 |
+
last_received = st.selectbox(
|
91 |
+
"Kiedy ostatnio otrzymałeś podobną wiadomość?",
|
92 |
+
('Dziś', 'W ciągu ostatniego tygodnia', 'W ciągu ostatniego miesiąca', 'Dłużej')
|
93 |
+
)
|
94 |
+
confidence_level = st.slider(
|
95 |
+
"Jak bardzo jesteś pewny, że wiadomość jest autentyczna?",
|
96 |
+
1, 5, 3,
|
97 |
+
help="1: Bardzo mało pewny, 5: Bardzo pewny"
|
98 |
+
)
|
99 |
+
unexpected = st.radio(
|
100 |
+
"Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?",
|
101 |
+
('Tak', 'Nie')
|
102 |
+
)
|
103 |
+
additional_notes = st.text_area("Dodatkowe uwagi lub informacje (opcjonalnie)", height=100)
|
104 |
+
|
105 |
+
submitted = st.form_submit_button(translations['analyze_button'])
|
106 |
|
107 |
+
if submitted:
|
108 |
+
if not message.strip():
|
109 |
+
st.error(translations['error_message_empty'])
|
110 |
+
elif not phone_number.strip():
|
111 |
+
st.error(translations['error_phone_empty'])
|
|
|
|
|
|
|
|
|
112 |
else:
|
113 |
+
# Weryfikacja numeru telefonu
|
114 |
+
country, operator = get_phone_info(phone_number)
|
115 |
+
if not country:
|
116 |
+
st.error(translations['invalid_phone'])
|
117 |
+
else:
|
118 |
+
st.write(f"**Informacje o numerze telefonu:**")
|
119 |
+
st.write(f"- **Kraj:** {country}")
|
120 |
+
st.write(f"- **Operator:** {operator}")
|
121 |
|
122 |
+
# Sprawdzenie, czy numer jest w bazie fałszywych numerów
|
123 |
+
if is_fake_number(phone_number):
|
124 |
+
st.warning(translations['already_reported'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
else:
|
126 |
+
st.info("Numer telefonu nie znajduje się w bazie fałszywych numerów.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
|
128 |
+
# Przeprowadź proste sprawdzenia heurystyczne
|
129 |
+
warnings = simple_checks(message)
|
130 |
+
if warnings:
|
131 |
+
st.warning("Znaleziono następujące potencjalne czerwone flagi:")
|
132 |
+
for warn in warnings:
|
133 |
+
st.write(f"- {warn}")
|
134 |
|
135 |
+
# Zbierz dodatkowe informacje
|
136 |
+
additional_info = f"""
|
137 |
+
**Jak często otrzymujesz wiadomości od tego numeru?** {frequency}
|
138 |
+
**Kiedy ostatnio otrzymałeś podobną wiadomość?** {last_received}
|
139 |
+
**Jak bardzo jesteś pewny, że wiadomość jest autentyczna?** {confidence_level}/5
|
140 |
+
**Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?** {unexpected}
|
141 |
+
**Dodatkowe uwagi lub informacje:** {additional_notes}
|
142 |
+
"""
|
143 |
|
144 |
+
# Pobierz klucz API
|
145 |
+
api_key = os.getenv('SAMBANOVA_API_KEY')
|
146 |
+
if not api_key:
|
147 |
+
st.error(translations['invalid_api_key'])
|
148 |
+
else:
|
149 |
+
# Analiza za pomocą modelu AI
|
150 |
+
with st.spinner("Analizuję wiadomość przy użyciu modelu AI..."):
|
151 |
+
analysis_text, risk_text, recommendations_text = analyze_message(message, phone_number, additional_info, api_key)
|
152 |
+
st.subheader("📄 Analiza treści wiadomości:")
|
153 |
+
st.markdown(analysis_text)
|
154 |
+
st.subheader("⚖️ Ocena ryzyka oszustwa:")
|
155 |
+
st.markdown(risk_text)
|
156 |
+
st.subheader("✅ Zalecenia dla użytkownika:")
|
157 |
+
st.markdown(recommendations_text)
|
158 |
|
159 |
+
# Aktualizacja statystyk na podstawie oceny ryzyka
|
160 |
+
try:
|
161 |
+
# Zakładając, że risk_text zawiera np. "Ryzyko: 7/10"
|
162 |
+
# Możesz dostosować parsowanie w zależności od formatu
|
163 |
+
match = re.search(r'(\d+)/10', risk_text)
|
164 |
+
if match:
|
165 |
+
risk_score = int(match.group(1))
|
166 |
+
fraud_detected = risk_score >= 7 # Przykładowy próg
|
167 |
+
update_stats(fraud_detected=fraud_detected)
|
168 |
+
else:
|
169 |
+
fraud_detected = False
|
170 |
+
except:
|
171 |
+
fraud_detected = False
|
172 |
|
173 |
+
# Dodanie analizy do historii
|
174 |
+
add_to_history(message, phone_number, analysis_text, risk_text, recommendations_text)
|
175 |
|
176 |
+
st.info(translations['info_reminder'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
|
178 |
# Wyświetlanie historii analiz
|
179 |
+
st.subheader(translations['history_header'])
|
180 |
history = get_history()
|
181 |
if history:
|
182 |
for entry in reversed(history[-5:]): # Wyświetl ostatnie 5 analiz
|
|
|
186 |
st.write(f"**Ocena Ryzyka:** {entry['risk_assessment']}")
|
187 |
st.write(f"**Zalecenia:** {entry['recommendations']}")
|
188 |
else:
|
189 |
+
st.info(translations['no_history'])
|
190 |
+
|
|
|
|
|
|
|
|
|
|
|
|