Spaces:
Sleeping
Sleeping
# 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.") | |