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