Spaces:
Paused
Paused
File size: 3,666 Bytes
4a36ad2 7c603fe ea6fb88 7c603fe 4a36ad2 cf91668 7c603fe 4a36ad2 fa3a00b 4a36ad2 7c603fe 4a36ad2 7c603fe bc8831f 4a36ad2 bc8831f 4a36ad2 bc8831f 4a36ad2 bc8831f 4a36ad2 bc8831f 4a36ad2 bc8831f 91c5333 bc8831f 4a36ad2 bc8831f 4a36ad2 bc8831f 91c5333 7c603fe 4a36ad2 7c603fe 4a36ad2 7c603fe 4a36ad2 7c603fe 4a36ad2 |
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# func_ai.py
import requests
import torch
from transformers import pipeline
from deep_translator import GoogleTranslator
import time
import os
from datetime import datetime
VECTOR_API_URL = os.getenv('API_URL')
def log_message(message):
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"[{timestamp}] {message}")
# Инициализация моделей
def init_models():
log_message("Инициализация моделей AI.")
sentiment_model = pipeline(
'sentiment-analysis',
model='cardiffnlp/twitter-xlm-roberta-base-sentiment',
tokenizer='cardiffnlp/twitter-xlm-roberta-base-sentiment',
device=0 if torch.cuda.is_available() else -1
)
classifier = pipeline(
"zero-shot-classification",
model="valhalla/distilbart-mnli-12-6",
device=0 if torch.cuda.is_available() else -1
)
return sentiment_model, classifier
sentiment_model, classifier = init_models()
def classify_comment(text):
if not text:
log_message("Получен пустой текст для классификации.")
return "non-interrogative"
log_message(f"Классификация комментария: {text}")
try:
translated_text = GoogleTranslator(source='auto', target="en").translate(text)
log_message(f"Переведенный текст: {translated_text}")
except Exception as e:
log_message(f"Ошибка при переводе: {e}")
return "non-interrogative"
if not translated_text:
log_message("Перевод вернул пустой текст.")
return "non-interrogative"
try:
result = classifier(translated_text, ["interrogative", "non-interrogative"], clean_up_tokenization_spaces=True)
log_message(f"Результат классификации: {result}")
except Exception as e:
log_message(f"Ошибка при классификации: {e}")
return "non-interrogative"
top_class = result['labels'][0]
log_message(f"Верхний класс: {top_class}")
return top_class
def analyze_sentiment(comments):
log_message("Начинаем анализ настроений.")
results = []
for i in range(0, len(comments), 50):
batch = comments[i:i + 50]
log_message(f"Анализируем батч с {i} по {i + len(batch)} комментарий: {batch}")
try:
batch_results = sentiment_model(batch)
log_message(f"Результаты батча: {batch_results}")
results.extend(batch_results)
except Exception as e:
log_message(f"Ошибка при анализе настроений батча: {e}")
time.sleep(1) # Задержка для предотвращения перегрузки
log_message("Анализ настроений завершен.")
return results
def retrieve_from_vdb(query):
log_message(f"Отправка запроса к FastAPI сервису: {query}")
try:
response = requests.post(f"{VECTOR_API_URL}/search/", json={"query": query})
if response.status_code == 200:
results = response.json().get("results", [])
log_message(f"Получено {len(results)} результатов: {results}")
return results
else:
log_message(f"Ошибка при поиске: {response.text}")
return []
except Exception as e:
log_message(f"Ошибка при запросе к векторной базе данных: {e}")
return []
|