ScamDetector / pages /Analysis.py
rafaldembski's picture
Create pages/Analysis.py
d5e86a3 verified
raw
history blame
4.41 kB
# pages/Analysis.py
import streamlit as st
from utils.functions import get_phone_info, simple_checks, analyze_message, update_stats
import os
def show_analysis():
st.header("📱 Analiza Fałszywych Wiadomości SMS")
st.write("Wprowadź treść wiadomości SMS oraz numer telefonu nadawcy, aby przeprowadzić analizę pod kątem potencjalnego oszustwa.")
with st.form("sms_form"):
message = st.text_area("Treść wiadomości SMS", height=150)
phone_number = st.text_input("Numer telefonu nadawcy (w formacie międzynarodowym, np. +48123123123)")
st.markdown("### Dodatkowe Informacje")
# Dodane pytania
frequency = st.selectbox(
"Jak często otrzymujesz wiadomości od tego numeru?",
('Pierwszy raz', 'Sporadycznie', 'Regularnie')
)
last_received = st.selectbox(
"Kiedy ostatnio otrzymałeś podobną wiadomość?",
('Dziś', 'W ciągu ostatniego tygodnia', 'W ciągu ostatniego miesiąca', 'Dłużej')
)
confidence_level = st.slider(
"Jak bardzo jesteś pewny, że wiadomość jest autentyczna?",
1, 5, 3,
help="1: Bardzo mało pewny, 5: Bardzo pewny"
)
unexpected = st.radio(
"Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?",
('Tak', 'Nie')
)
additional_notes = st.text_area("Dodatkowe uwagi lub informacje (opcjonalnie)", height=100)
submitted = st.form_submit_button("Analizuj wiadomość")
if submitted:
if not message.strip():
st.error("Proszę wprowadzić treść wiadomości.")
elif not phone_number.strip():
st.error("Proszę wprowadzić numer telefonu nadawcy.")
else:
# Informacje o numerze telefonu
country, operator = get_phone_info(phone_number)
if country and operator:
st.write(f"**Informacje o numerze telefonu:**")
st.write(f"- **Kraj:** {country}")
st.write(f"- **Operator:** {operator}")
else:
st.write("Nie udało się uzyskać informacji o numerze telefonu.")
# Heurystyczne sprawdzenia
warnings = simple_checks(message)
if warnings:
st.warning("Znaleziono następujące potencjalne czerwone flagi:")
for warn in warnings:
st.write(f"- {warn}")
# Zbierz dodatkowe informacje
additional_info = f"""
**Jak często otrzymujesz wiadomości od tego numeru?** {frequency}
**Kiedy ostatnio otrzymałeś podobną wiadomość?** {last_received}
**Jak bardzo jesteś pewny, że wiadomość jest autentyczna?** {confidence_level}/5
**Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?** {unexpected}
**Dodatkowe uwagi lub informacje:** {additional_notes}
"""
# Pobierz klucz API
api_key = os.getenv('SAMBANOVA_API_KEY')
if not api_key:
st.error("Brak klucza API. Ustaw zmienną środowiskową SAMBANOVA_API_KEY w ustawieniach aplikacji.")
else:
# Analiza za pomocą modelu AI
with st.spinner("Analizuję wiadomość przy użyciu modelu AI..."):
analysis_text, risk_text, recommendations_text = analyze_message(message, phone_number, additional_info, api_key)
st.subheader("📑 Analiza treści wiadomości:")
st.markdown(analysis_text)
st.subheader("⚠️ Ocena ryzyka oszustwa:")
st.markdown(risk_text)
st.subheader("✅ Zalecenia dla użytkownika:")
st.markdown(recommendations_text)
# Aktualizacja statystyk na podstawie oceny ryzyka
try:
risk_score = int(risk_text.split("/")[0].split(":")[-1].strip())
fraud_detected = risk_score >= 7 # Przykładowy próg
update_stats(fraud_detected=fraud_detected)
except:
pass
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.")