Spaces:
Sleeping
Sleeping
rafaldembski
commited on
Commit
•
6f95eac
1
Parent(s):
9899a9d
Update utils/functions.py
Browse files- utils/functions.py +99 -23
utils/functions.py
CHANGED
@@ -29,7 +29,7 @@ def load_json(file_path):
|
|
29 |
"""Ładuje dane z pliku JSON. Jeśli plik nie istnieje, zwraca pustą listę lub domyślny obiekt."""
|
30 |
if not os.path.exists(file_path):
|
31 |
if file_path.endswith('stats.json'):
|
32 |
-
return {"total_analyses": 0, "total_frauds_detected": 0}
|
33 |
else:
|
34 |
return []
|
35 |
with open(file_path, 'r', encoding='utf-8') as file:
|
@@ -39,7 +39,7 @@ def load_json(file_path):
|
|
39 |
except json.JSONDecodeError:
|
40 |
logging.error(f"Nie można załadować danych z {file_path}. Plik jest uszkodzony.")
|
41 |
if file_path.endswith('stats.json'):
|
42 |
-
return {"total_analyses": 0, "total_frauds_detected": 0}
|
43 |
return []
|
44 |
|
45 |
def save_json(file_path, data):
|
@@ -77,6 +77,7 @@ def add_to_history(message, phone_number, analysis, risk, recommendations):
|
|
77 |
history = load_json(HISTORY_FILE)
|
78 |
history.append({
|
79 |
"timestamp": datetime.now().isoformat(),
|
|
|
80 |
"message": message,
|
81 |
"phone_number": phone_number,
|
82 |
"analysis": analysis,
|
@@ -105,10 +106,11 @@ def update_stats(fraud_detected=False):
|
|
105 |
"""Aktualizuje statystyki analiz w pliku stats.json."""
|
106 |
stats = load_json(STATS_FILE)
|
107 |
stats["total_analyses"] += 1
|
|
|
108 |
if fraud_detected:
|
109 |
stats["total_frauds_detected"] += 1
|
110 |
save_json(STATS_FILE, stats)
|
111 |
-
logging.info(f"Statystyki zostały zaktualizowane: Analiz {stats['total_analyses']}, Oszustw {stats['total_frauds_detected']}.")
|
112 |
|
113 |
def get_stats():
|
114 |
"""Pobiera statystyki analiz z pliku stats.json."""
|
@@ -125,8 +127,8 @@ def get_phone_info(phone_number):
|
|
125 |
"""Weryfikuje numer telefonu i zwraca informacje o kraju i operatorze."""
|
126 |
try:
|
127 |
parsed_number = phonenumbers.parse(phone_number, None)
|
128 |
-
country = geocoder.description_for_number(parsed_number, 'pl')
|
129 |
-
operator = carrier.name_for_number(parsed_number, 'pl')
|
130 |
if not country:
|
131 |
country = "Nieznany"
|
132 |
if not operator:
|
@@ -163,7 +165,7 @@ def analyze_message(message, phone_number, additional_info, api_key, language):
|
|
163 |
logging.error("Brak klucza API.")
|
164 |
return "Brak klucza API.", "Brak klucza API.", "Brak klucza API."
|
165 |
|
166 |
-
url = "https://api.sambanova.ai/v1/chat/completions"
|
167 |
headers = {
|
168 |
"Authorization": f"Bearer {api_key}",
|
169 |
"Content-Type": "application/json"
|
@@ -177,53 +179,126 @@ Jesteś zaawansowanym asystentem AI specjalizującym się w identyfikacji fałsz
|
|
177 |
**📝 Analiza Treści Wiadomości:**
|
178 |
- Przeprowadź szczegółową analizę treści wiadomości, identyfikując potencjalne czerwone flagi, takie jak błędy językowe, prośby o dane osobowe, pilne prośby o kontakt itp.
|
179 |
- Jakie elementy treści mogą wskazywać na oszustwo?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
</analysis>
|
181 |
|
182 |
<risk_assessment>
|
183 |
**⚖️ Ocena Ryzyka Oszustwa:**
|
184 |
- Na podstawie analizy treści i dostępnych informacji oceń prawdopodobieństwo, że wiadomość jest oszustwem. Użyj skali od 1 do 10, gdzie 1 oznacza bardzo niskie ryzyko, a 10 bardzo wysokie ryzyko.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
</risk_assessment>
|
186 |
|
187 |
<recommendations>
|
188 |
**💡 Zalecenia dla Użytkownika:**
|
189 |
- Podaj jasne i konkretne zalecenia dotyczące dalszych kroków, które użytkownik powinien podjąć.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
</recommendations>
|
191 |
""",
|
192 |
'German': """
|
193 |
-
Du bist ein fortgeschrittener KI-Assistent, spezialisiert auf die Identifizierung gefälschter SMS-Nachrichten. Deine Aufgabe ist es, eine detaillierte Analyse der Nachricht durchzuführen. Deine Antwort sollte in drei Abschnitte unterteilt sein:
|
194 |
|
195 |
<analysis>
|
196 |
-
|
197 |
-
- Führe eine detaillierte Analyse des Nachrichteninhalts durch und identifiziere potenzielle rote Flaggen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
</analysis>
|
199 |
|
200 |
<risk_assessment>
|
201 |
-
|
202 |
-
- Bewerte die Wahrscheinlichkeit, dass die Nachricht betrügerisch ist.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
</risk_assessment>
|
204 |
|
205 |
<recommendations>
|
206 |
-
|
207 |
-
- Gib klare und spezifische Empfehlungen zu den nächsten Schritten.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
</recommendations>
|
209 |
""",
|
210 |
'English': """
|
211 |
-
You are an advanced AI assistant specializing in identifying fake SMS messages. Your task is to conduct a detailed analysis of the message. Your response should be divided into three sections:
|
212 |
|
213 |
<analysis>
|
214 |
-
|
215 |
-
- Conduct a detailed analysis of the message content
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
</analysis>
|
217 |
|
218 |
<risk_assessment>
|
219 |
-
|
220 |
-
- Assess the likelihood that the message is fraudulent.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
</risk_assessment>
|
222 |
|
223 |
<recommendations>
|
224 |
-
|
225 |
-
- Provide clear and
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
</recommendations>
|
|
|
|
|
227 |
"""
|
228 |
}
|
229 |
|
@@ -240,7 +315,7 @@ Additional Information:
|
|
240 |
Provide your analysis and conclusions following the guidelines above."""
|
241 |
|
242 |
payload = {
|
243 |
-
"model": "Meta-Llama-3.1-8B-Instruct",
|
244 |
"messages": [
|
245 |
{"role": "system", "content": system_prompt},
|
246 |
{"role": "user", "content": user_prompt}
|
@@ -355,8 +430,9 @@ def extract_text_from_image(image_file):
|
|
355 |
def get_email_info(email):
|
356 |
"""Sprawdza informacje o nadawcy e-maila (np. domena, organizacja, kraj)."""
|
357 |
domain = email.split('@')[-1] # Prosta ekstrakcja domeny
|
|
|
358 |
return {
|
359 |
"domain": domain,
|
360 |
-
"organization": "Nieznana organizacja",
|
361 |
-
"country": "Nieznany kraj"
|
362 |
}
|
|
|
29 |
"""Ładuje dane z pliku JSON. Jeśli plik nie istnieje, zwraca pustą listę lub domyślny obiekt."""
|
30 |
if not os.path.exists(file_path):
|
31 |
if file_path.endswith('stats.json'):
|
32 |
+
return {"total_analyses": 0, "total_frauds_detected": 0, "total": 0} # Dodaj klucz 'total'
|
33 |
else:
|
34 |
return []
|
35 |
with open(file_path, 'r', encoding='utf-8') as file:
|
|
|
39 |
except json.JSONDecodeError:
|
40 |
logging.error(f"Nie można załadować danych z {file_path}. Plik jest uszkodzony.")
|
41 |
if file_path.endswith('stats.json'):
|
42 |
+
return {"total_analyses": 0, "total_frauds_detected": 0, "total": 0} # Dodaj klucz 'total'
|
43 |
return []
|
44 |
|
45 |
def save_json(file_path, data):
|
|
|
77 |
history = load_json(HISTORY_FILE)
|
78 |
history.append({
|
79 |
"timestamp": datetime.now().isoformat(),
|
80 |
+
"date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), # Dodaj klucz 'date'
|
81 |
"message": message,
|
82 |
"phone_number": phone_number,
|
83 |
"analysis": analysis,
|
|
|
106 |
"""Aktualizuje statystyki analiz w pliku stats.json."""
|
107 |
stats = load_json(STATS_FILE)
|
108 |
stats["total_analyses"] += 1
|
109 |
+
stats["total"] += 1 # Dodajemy do całkowitej liczby analiz
|
110 |
if fraud_detected:
|
111 |
stats["total_frauds_detected"] += 1
|
112 |
save_json(STATS_FILE, stats)
|
113 |
+
logging.info(f"Statystyki zostały zaktualizowane: Analiz {stats['total_analyses']}, Oszustw {stats['total_frauds_detected']}, Łącznie {stats['total']}.")
|
114 |
|
115 |
def get_stats():
|
116 |
"""Pobiera statystyki analiz z pliku stats.json."""
|
|
|
127 |
"""Weryfikuje numer telefonu i zwraca informacje o kraju i operatorze."""
|
128 |
try:
|
129 |
parsed_number = phonenumbers.parse(phone_number, None)
|
130 |
+
country = geocoder.description_for_number(parsed_number, 'pl') # Zmiana na 'pl' dla polskiego
|
131 |
+
operator = carrier.name_for_number(parsed_number, 'pl') # Zmiana na 'pl' dla polskiego
|
132 |
if not country:
|
133 |
country = "Nieznany"
|
134 |
if not operator:
|
|
|
165 |
logging.error("Brak klucza API.")
|
166 |
return "Brak klucza API.", "Brak klucza API.", "Brak klucza API."
|
167 |
|
168 |
+
url = "https://api.sambanova.ai/v1/chat/completions" # Upewnij się, że to poprawny URL
|
169 |
headers = {
|
170 |
"Authorization": f"Bearer {api_key}",
|
171 |
"Content-Type": "application/json"
|
|
|
179 |
**📝 Analiza Treści Wiadomości:**
|
180 |
- Przeprowadź szczegółową analizę treści wiadomości, identyfikując potencjalne czerwone flagi, takie jak błędy językowe, prośby o dane osobowe, pilne prośby o kontakt itp.
|
181 |
- Jakie elementy treści mogą wskazywać na oszustwo?
|
182 |
+
- Jakie słowa kluczowe są używane w wiadomości? (np. "pieniądze", "przelew", "nagroda")
|
183 |
+
- Jakie są reakcje na tę wiadomość w kontekście kulturowym i językowym?
|
184 |
+
|
185 |
+
**❓ Dodatkowe pytania do przemyślenia:**
|
186 |
+
- Kiedy i jak często otrzymujesz wiadomości z tego numeru?
|
187 |
+
- Czy numer nadawcy jest znany z innych źródeł?
|
188 |
+
- Jakie są konsekwencje dla Ciebie, jeśli ta wiadomość jest oszustwem?
|
189 |
+
- Jakie masz doświadczenia z podobnymi wiadomościami w przeszłości?
|
190 |
</analysis>
|
191 |
|
192 |
<risk_assessment>
|
193 |
**⚖️ Ocena Ryzyka Oszustwa:**
|
194 |
- Na podstawie analizy treści i dostępnych informacji oceń prawdopodobieństwo, że wiadomość jest oszustwem. Użyj skali od 1 do 10, gdzie 1 oznacza bardzo niskie ryzyko, a 10 bardzo wysokie ryzyko.
|
195 |
+
- Jakie czynniki wpływają na tę ocenę?
|
196 |
+
- Jakie są argumenty za i przeciw ocenie tej wiadomości jako oszustwa?
|
197 |
+
|
198 |
+
**❓ Dodatkowe pytania do przemyślenia:**
|
199 |
+
- Jakie inne wiadomości z tego numeru otrzymywałeś w przeszłości?
|
200 |
+
- Czy wiadomość zawiera jakiekolwiek inne informacje, które mogłyby być użyteczne w ocenie ryzyka?
|
201 |
+
- Jakie są Twoje dotychczasowe doświadczenia z oszustwami SMS?
|
202 |
+
- Jakie są Twoje przemyślenia na temat nadawcy tej wiadomości?
|
203 |
</risk_assessment>
|
204 |
|
205 |
<recommendations>
|
206 |
**💡 Zalecenia dla Użytkownika:**
|
207 |
- Podaj jasne i konkretne zalecenia dotyczące dalszych kroków, które użytkownik powinien podjąć.
|
208 |
+
- Jakie środki bezpieczeństwa powinny być wdrożone?
|
209 |
+
|
210 |
+
**❓ Dodatkowe pytania do przemyślenia:**
|
211 |
+
- Czy powinieneś zgłosić tę wiadomość do operatora sieci?
|
212 |
+
- Jakie dodatkowe kroki możesz podjąć, aby upewnić się, że nie padłeś ofiarą oszustwa?
|
213 |
+
- Czy masz dostęp do innych narzędzi, które mogą pomóc w ocenie tej wiadomości?
|
214 |
+
- Jakie działania możesz podjąć, aby zwiększyć swoje bezpieczeństwo w przyszłości?
|
215 |
</recommendations>
|
216 |
""",
|
217 |
'German': """
|
218 |
+
Du bist ein fortgeschrittener KI-Assistent, spezialisiert auf die Identifizierung gefälschter SMS-Nachrichten. Deine Aufgabe ist es, eine detaillierte Analyse der Nachricht durchzuführen, indem du einen tiefgreifenden Denkprozess nutzt und eine umfassende Bewertung lieferst. Deine Antwort sollte in drei Abschnitte unterteilt sein:
|
219 |
|
220 |
<analysis>
|
221 |
+
**📝 Nachrichteninhaltsanalyse:**
|
222 |
+
- Führe eine detaillierte Analyse des Nachrichteninhalts durch und identifiziere potenzielle rote Flaggen wie sprachliche Fehler, Aufforderungen zur Preisgabe persönlicher Daten, dringende Kontaktanfragen usw.
|
223 |
+
- Welche Elemente im Inhalt könnten auf Betrug hinweisen?
|
224 |
+
- Welche Schlüsselwörter werden in der Nachricht verwendet? (z. B. "Geld", "Überweisung", "Preis")
|
225 |
+
- Wie reagieren die Menschen auf diese Nachricht im kulturellen und sprachlichen Kontext?
|
226 |
+
|
227 |
+
**❓ Zusätzliche Fragen zur Überlegung:**
|
228 |
+
- Wann und wie oft erhältst du Nachrichten von dieser Nummer?
|
229 |
+
- Ist die Nummer des Absenders aus anderen Quellen bekannt?
|
230 |
+
- Was sind die Konsequenzen für dich, wenn diese Nachricht ein Betrug ist?
|
231 |
+
- Welche Erfahrungen hast du in der Vergangenheit mit ähnlichen Nachrichten gemacht?
|
232 |
</analysis>
|
233 |
|
234 |
<risk_assessment>
|
235 |
+
**⚖️ Betrugsrisikobewertung:**
|
236 |
+
- Bewerte die Wahrscheinlichkeit, dass die Nachricht betrügerisch ist, auf einer Skala von 1 bis 10, wobei 1 sehr geringes Risiko und 10 sehr hohes Risiko bedeutet.
|
237 |
+
- Welche Faktoren beeinflussen diese Bewertung?
|
238 |
+
- Was sind die Argumente für und gegen die Bewertung dieser Nachricht als Betrug?
|
239 |
+
|
240 |
+
**❓ Zusätzliche Fragen zur Überlegung:**
|
241 |
+
- Welche anderen Nachrichten hast du in der Vergangenheit von dieser Nummer erhalten?
|
242 |
+
- Enthält die Nachricht weitere Informationen, die bei der Risikobewertung hilfreich sein könnten?
|
243 |
+
- Welche bisherigen Erfahrungen hast du mit SMS-Betrügereien gemacht?
|
244 |
+
- Welche Gedanken hast du über den Absender dieser Nachricht?
|
245 |
</risk_assessment>
|
246 |
|
247 |
<recommendations>
|
248 |
+
**💡 Empfehlungen für den Benutzer:**
|
249 |
+
- Gib klare und spezifische Empfehlungen zu den nächsten Schritten, die der Benutzer unternehmen sollte.
|
250 |
+
- Welche Sicherheitsmaßnahmen sollten umgesetzt werden?
|
251 |
+
|
252 |
+
**❓ Zusätzne Fragen zur Überlegung:**
|
253 |
+
- Solltest du diese Nachricht deinem Mobilfunkanbieter melden?
|
254 |
+
- Welche weiteren Schritte kannst du unternehmen, um sicherzustellen, dass du nicht Opfer eines Betrugs geworden bist?
|
255 |
+
- Hast du Zugriff auf andere Werkzeuge, die dir helfen können, diese Nachricht zu bewerten?
|
256 |
+
- Welche Maßnahmen kannst du ergreifen, um deine Sicherheit in Zukunft zu erhöhen?
|
257 |
</recommendations>
|
258 |
""",
|
259 |
'English': """
|
260 |
+
You are an advanced AI assistant specializing in identifying fake SMS messages. Your task is to conduct a detailed analysis of the message, utilizing a deep thinking process and providing a comprehensive assessment. Your response should be divided into three sections:
|
261 |
|
262 |
<analysis>
|
263 |
+
**📝 Message Content Analysis:**
|
264 |
+
- Conduct a detailed analysis of the message content, identifying potential red flags such as language errors, requests for personal information, urgent contact requests, etc.
|
265 |
+
- What elements of the content may indicate fraud?
|
266 |
+
- What keywords are used in the message? (e.g., "money", "transfer", "prize")
|
267 |
+
- What are the cultural and linguistic reactions to this message?
|
268 |
+
|
269 |
+
**❓ Additional questions to consider:**
|
270 |
+
- When and how often do you receive messages from this number?
|
271 |
+
- Is the sender's number known from other sources?
|
272 |
+
- What are the consequences for you if this message is a fraud?
|
273 |
+
- What experiences have you had in the past with similar messages?
|
274 |
</analysis>
|
275 |
|
276 |
<risk_assessment>
|
277 |
+
**⚖️ Fraud Risk Assessment:**
|
278 |
+
- Assess the likelihood that the message is fraudulent on a scale from 1 to 10, where 1 indicates very low risk and 10 indicates very high risk.
|
279 |
+
- What factors influence this assessment?
|
280 |
+
- What are the arguments for and against assessing this message as fraud?
|
281 |
+
|
282 |
+
**❓ Additional questions to consider:**
|
283 |
+
- What other messages have you received from this number in the past?
|
284 |
+
- Does the message contain any other information that could be useful in assessing the risk?
|
285 |
+
- What previous experiences do you have with SMS scams?
|
286 |
+
- What are your thoughts on the sender of this message?
|
287 |
</risk_assessment>
|
288 |
|
289 |
<recommendations>
|
290 |
+
**💡 User Recommendations:**
|
291 |
+
- Provide clear and concrete recommendations regarding the next steps the user should take.
|
292 |
+
- What security measures should be implemented?
|
293 |
+
|
294 |
+
**❓ Additional questions to consider:**
|
295 |
+
- Should you report this message to your service provider?
|
296 |
+
- What additional steps can you take to ensure that you have not fallen victim to a scam?
|
297 |
+
- Do you have access to other tools that can help you assess this message?
|
298 |
+
- What actions can you take to enhance your security in the future?
|
299 |
</recommendations>
|
300 |
+
|
301 |
+
Your response should be formatted exactly as specified above, using the <analysis>, <risk_assessment>, and <recommendations> tags. Ensure that each section is thoroughly and comprehensively filled out.
|
302 |
"""
|
303 |
}
|
304 |
|
|
|
315 |
Provide your analysis and conclusions following the guidelines above."""
|
316 |
|
317 |
payload = {
|
318 |
+
"model": "Meta-Llama-3.1-8B-Instruct", # Upewnij się, że to poprawny model API
|
319 |
"messages": [
|
320 |
{"role": "system", "content": system_prompt},
|
321 |
{"role": "user", "content": user_prompt}
|
|
|
430 |
def get_email_info(email):
|
431 |
"""Sprawdza informacje o nadawcy e-maila (np. domena, organizacja, kraj)."""
|
432 |
domain = email.split('@')[-1] # Prosta ekstrakcja domeny
|
433 |
+
# Możesz dodać więcej logiki do weryfikacji domeny
|
434 |
return {
|
435 |
"domain": domain,
|
436 |
+
"organization": "Nieznana organizacja", # Możesz dodać logikę, aby zidentyfikować organizację
|
437 |
+
"country": "Nieznany kraj" # Możesz dodać logikę, aby zidentyfikować kraj
|
438 |
}
|