Spaces:
Runtime error
Runtime error
File size: 2,701 Bytes
8e30b6a c0426da 8e30b6a c0426da dcb5a1a c0426da 8e30b6a c0426da dcb5a1a c0426da dcb5a1a 8e30b6a c0426da 8e30b6a c0426da 8e30b6a c0426da dcb5a1a c0426da dcb5a1a 8e30b6a dcb5a1a 8e30b6a c0426da 8e30b6a c0426da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import logging
import time
import gc
from typing import Dict, Any
from app.config_manager import get_active_text_model
from app.utils.exceptions import SetupRequiredError
from transformers import pipeline
# Importujesz helpery z Kroku 2:
# from config_manager import get_active_text_model
logger = logging.getLogger(__name__)
# Przechowujemy nazwę aktualnie załadowanego modelu oraz sam obiekt klasyfikatora
_loaded_model_name = None
_text_classifier = None
def _load_model(target_model_name: str):
global _text_classifier, _loaded_model_name
# Jeśli model w pamięci jest tym, którego potrzebujemy, po prostu go zwracamy
if _text_classifier is not None and _loaded_model_name == target_model_name:
return _text_classifier
logger.info(f"Wymagana zmiana modelu. Obecny w RAM: {_loaded_model_name}, Nowy: {target_model_name}")
# Zwalnianie pamięci po poprzednim modelu
_text_classifier = None
gc.collect()
logger.info(f"Ładowanie modelu text detector: {target_model_name}...")
_text_classifier = pipeline(
"text-classification",
model=target_model_name,
device=-1 # -1 oznacza CPU, jeśli masz GPU ustaw np. 0
)
_loaded_model_name = target_model_name
logger.info(f"Model {target_model_name} został pomyślnie załadowany.")
return _text_classifier
async def analyze_text(text: str, guild_id: str) -> Dict[str, Any]:
start_time = time.time()
# Pobranie aktywnego modelu dla danej gildii
active_model = get_active_text_model(guild_id)
# BLOKADA: Jeżeli model to 'none' lub brak konfiguracji, natychmiast wyrzucamy błąd
if not active_model:
logger.warning(f"Zablokowano zapytanie! Serwer {guild_id} nie ma skonfigurowanego modelu.")
raise SetupRequiredError(
f"Serwer o ID '{guild_id}' nie został jeszcze skonfigurowany. "
"Użyj komendy setup na Discordzie przed wykonaniem analizy."
)
logger.info(f"Rozpoczęcie analizy tekstu dla serwera {guild_id} przy użyciu modelu: {active_model}")
classifier = _load_model(active_model)
result = classifier(text)
label = result[0]["label"]
score = result[0]["score"]
is_deepfake = label.lower() in ["fake", "ai", "chatgpt", "label_1", "machine-generated"]
confidence = score
analysis_time = time.time() - start_time
response = {
"is_deepfake": is_deepfake,
"confidence": round(confidence, 3),
"analysis_time": round(analysis_time, 3),
"used_model": active_model,
}
logger.info(f"Analiza zakończona sukcesem dla serwera {guild_id}.")
return response |