rafaldembski commited on
Commit
6f95eac
1 Parent(s): 9899a9d

Update utils/functions.py

Browse files
Files changed (1) hide show
  1. 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
- **Nachrichteninhaltsanalyse:**
197
- - Führe eine detaillierte Analyse des Nachrichteninhalts durch und identifiziere potenzielle rote Flaggen.
 
 
 
 
 
 
 
 
 
198
  </analysis>
199
 
200
  <risk_assessment>
201
- **Betrugsrisikobewertung:**
202
- - Bewerte die Wahrscheinlichkeit, dass die Nachricht betrügerisch ist.
 
 
 
 
 
 
 
 
203
  </risk_assessment>
204
 
205
  <recommendations>
206
- **Empfehlungen für den Benutzer:**
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
- **Message Content Analysis:**
215
- - Conduct a detailed analysis of the message content and identify potential red flags.
 
 
 
 
 
 
 
 
 
216
  </analysis>
217
 
218
  <risk_assessment>
219
- **Fraud Risk Assessment:**
220
- - Assess the likelihood that the message is fraudulent.
 
 
 
 
 
 
 
 
221
  </risk_assessment>
222
 
223
  <recommendations>
224
- **User Recommendations:**
225
- - Provide clear and specific recommendations regarding the next steps the user should take.
 
 
 
 
 
 
 
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
  }