rafaldembski commited on
Commit
3aa83be
verified
1 Parent(s): 4bc200c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +111 -0
app.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+ import os
4
+ import phonenumbers
5
+ from phonenumbers import geocoder, carrier
6
+ import re
7
+
8
+ # Pobierz klucz API z zmiennej 艣rodowiskowej
9
+ API_KEY = os.getenv('SAMBANOVA_API_KEY')
10
+
11
+ if not API_KEY:
12
+ st.error("Brak klucza API. Ustaw zmienn膮 艣rodowiskow膮 SAMBANOVA_API_KEY w ustawieniach Spaces.")
13
+ st.stop()
14
+
15
+ # Funkcja do weryfikacji numeru telefonu
16
+ def get_phone_info(phone_number):
17
+ try:
18
+ parsed_number = phonenumbers.parse(phone_number, None)
19
+ country = geocoder.description_for_number(parsed_number, 'pl')
20
+ operator = carrier.name_for_number(parsed_number, 'pl')
21
+ return country, operator
22
+ except phonenumbers.NumberParseException:
23
+ return None, None
24
+
25
+ # Proste sprawdzenia heurystyczne wiadomo艣ci
26
+ def simple_checks(message):
27
+ warnings = []
28
+ # S艂owa kluczowe cz臋sto u偶ywane w oszustwach
29
+ scam_keywords = ['pieni膮dze', 'przelew', 'has艂o', 'kod', 'nagroda', 'wygrana', 'pilne', 'pomoc', 'op艂ata']
30
+ if any(keyword in message.lower() for keyword in scam_keywords):
31
+ warnings.append("Wiadomo艣膰 zawiera s艂owa kluczowe zwi膮zane z potencjalnym oszustwem.")
32
+ # Sprawdzenie obecno艣ci link贸w
33
+ if re.search(r'http[s]?://', message):
34
+ warnings.append("Wiadomo艣膰 zawiera link.")
35
+ # Sprawdzenie, czy nadawca prosi o poufne informacje
36
+ if re.search(r'\b(podaj|prze艣lij|udost臋pnij)\b.*\b(has艂o|kod|dane osobowe|numer konta)\b', message.lower()):
37
+ warnings.append("Wiadomo艣膰 zawiera pro艣b臋 o poufne informacje.")
38
+ return warnings
39
+
40
+ # Funkcja do analizy wiadomo艣ci za pomoc膮 API SambaNova
41
+ def analyze_message(message, phone_number):
42
+ url = "https://api.sambanova.ai/v1/chat/completions"
43
+ headers = {
44
+ "Authorization": f"Bearer {API_KEY}"
45
+ }
46
+ system_prompt = "Jeste艣 asystentem pomagaj膮cym w identyfikacji fa艂szywych wiadomo艣ci SMS. Analizuj pod k膮tem typowych cech oszustw i phishingu. Podaj swoj膮 ocen臋 oraz zalecenia dla u偶ytkownika."
47
+ user_prompt = f"Przeanalizuj nast臋puj膮c膮 wiadomo艣膰 pod k膮tem potencjalnego oszustwa:\n\nWiadomo艣膰: {message}\nNumer telefonu: {phone_number}\n\nPodaj swoj膮 analiz臋 i wnioski po polsku."
48
+
49
+ payload = {
50
+ "model": "Meta-Llama-3.1-8B-Instruct",
51
+ "messages": [
52
+ {"role": "system", "content": system_prompt},
53
+ {"role": "user", "content": user_prompt}
54
+ ],
55
+ "max_tokens": 500,
56
+ "temperature": 0.1,
57
+ "top_p": 0.9,
58
+ "stop": ["<|eot_id|>"]
59
+ }
60
+
61
+ response = requests.post(url, headers=headers, json=payload)
62
+ if response.status_code == 200:
63
+ data = response.json()
64
+ analysis = data['choices'][0]['message']['content']
65
+ return analysis
66
+ else:
67
+ return f"B艂膮d API: {response.status_code} - {response.text}"
68
+
69
+ # G艂贸wny interfejs aplikacji
70
+ def main():
71
+ st.set_page_config(page_title="Detektor Fa艂szywych Wiadomo艣ci SMS", page_icon="馃摫")
72
+ st.title("馃摫 Detektor Fa艂szywych Wiadomo艣ci SMS")
73
+ st.write("Wprowad藕 tre艣膰 wiadomo艣ci SMS oraz numer telefonu nadawcy, aby przeprowadzi膰 analiz臋 pod k膮tem potencjalnego oszustwa.")
74
+
75
+ with st.form("sms_form"):
76
+ message = st.text_area("Tre艣膰 wiadomo艣ci SMS", height=150)
77
+ phone_number = st.text_input("Numer telefonu nadawcy (w formacie mi臋dzynarodowym, np. +48123123123)")
78
+ submitted = st.form_submit_button("Analizuj wiadomo艣膰")
79
+
80
+ if submitted:
81
+ if not message.strip():
82
+ st.error("Prosz臋 wprowadzi膰 tre艣膰 wiadomo艣ci.")
83
+ else:
84
+ # Wy艣wietl informacje o numerze telefonu
85
+ if phone_number:
86
+ country, operator = get_phone_info(phone_number)
87
+ if country and operator:
88
+ st.write(f"**Informacje o numerze telefonu:**")
89
+ st.write(f"- **Kraj:** {country}")
90
+ st.write(f"- **Operator:** {operator}")
91
+ else:
92
+ st.write("Nie uda艂o si臋 uzyska膰 informacji o numerze telefonu.")
93
+
94
+ # Przeprowad藕 proste sprawdzenia heurystyczne
95
+ warnings = simple_checks(message)
96
+ if warnings:
97
+ st.warning("Znaleziono nast臋puj膮ce potencjalne czerwone flagi:")
98
+ for warn in warnings:
99
+ st.write(f"- {warn}")
100
+
101
+ # Analiza za pomoc膮 modelu j臋zykowego
102
+ with st.spinner("Analizuj臋 wiadomo艣膰 przy u偶yciu modelu AI..."):
103
+ analysis = analyze_message(message, phone_number)
104
+ st.subheader("Wynik analizy AI:")
105
+ st.write(analysis)
106
+
107
+ 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.")
108
+
109
+ if __name__ == "__main__":
110
+ main()
111
+