diff --git a/app/api/routes.py b/app/api/routes.py index 8bd1bf0..9e188b4 100644 --- a/app/api/routes.py +++ b/app/api/routes.py @@ -31,7 +31,6 @@ async def assess_toxicity(input: TextInput): cache_key = get_cache_key(preprocessed_text) - # Попытка получить результат из кеша cached_result = await cache.get(cache_key) if cached_result: try: @@ -42,12 +41,10 @@ async def assess_toxicity(input: TextInput): logger.warning(f"Кеш для ключа {cache_key} повреждён. Переходим к обработке.") try: - # Отправляем задачу в очередь Celery result = assess_toxicity_task.delay(preprocessed_text) logger.info(f"Задача отправлена в очередь Celery для текста: {preprocessed_text}") - toxicity_score = result.get(timeout=10) # Ждем результат до 10 секунд + toxicity_score = result.get(timeout=5) - # Сохраняем результат в кеш await cache.set(cache_key, json.dumps(toxicity_score)) logger.info(f"Результат сохранён в кеш для ключа {cache_key}: {toxicity_score}") diff --git a/app/core/config.py b/app/core/config.py index ae04c70..8181552 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -43,14 +43,11 @@ class Settings(BaseSettings): if not os.path.exists(config_path): raise ValueError(f'В локальной модели по пути "{v}" отсутствует файл config.json') elif v.startswith("http"): - pass # Предполагаем, что это URL, проверим ниже + pass else: - # Предполагаем, что это название модели в HuggingFace - pass # Проверим ниже + pass try: - # Попытка загрузить конфигурацию модели - # Это не загрузит модель полностью, но проверит доступность модели AutoTokenizer.from_pretrained(v, cache_dir=None, force_download=False) except Exception as e: raise ValueError(f'Невозможно загрузить конфигурацию модели из transformers для "{v}": {e}') diff --git a/app/handlers/toxicity_handler.py b/app/handlers/toxicity_handler.py index 6683b47..dd96f96 100644 --- a/app/handlers/toxicity_handler.py +++ b/app/handlers/toxicity_handler.py @@ -11,7 +11,7 @@ class ToxicityHandler: self.tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) self.model = AutoModelForSequenceClassification.from_pretrained(model_checkpoint) self.model.to(self.device) - self.model.eval() # Перевод модели в режим оценки + self.model.eval() def text_to_toxicity(self, text: str, aggregate: bool = True) -> float: """Вычисляет токсичность текста. @@ -30,6 +30,5 @@ class ToxicityHandler: proba = proba.cpu().numpy()[0] if aggregate: - # Пример агрегирования, можно настроить по необходимости return float(1 - proba[0] * (1 - proba[-1])) return proba.tolist() diff --git a/app/main.py b/app/main.py index a36fa7c..ce87d0b 100644 --- a/app/main.py +++ b/app/main.py @@ -18,16 +18,14 @@ app = FastAPI( version="1.0" ) -# Разрешение CORS (опционально, настройте по необходимости) app.add_middleware( CORSMiddleware, - allow_origins=["*"], # Замените на конкретные домены при необходимости + allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) -# Включение маршрутов API app.include_router(routes.router) @app.on_event("startup") diff --git a/app/tasks.py b/app/tasks.py index 9f1955c..5bb57fc 100644 --- a/app/tasks.py +++ b/app/tasks.py @@ -2,14 +2,12 @@ from celery import Celery from app.core.config import settings from app.handlers.toxicity_handler import ToxicityHandler -# Инициализация Celery celery_app = Celery( 'tasks', broker=settings.CELERY_BROKER_URL, backend=settings.CELERY_RESULT_BACKEND ) -# Конфигурация Celery celery_app.conf.update( task_serializer='json', result_serializer='json', @@ -18,7 +16,6 @@ celery_app.conf.update( enable_utc=True, ) -# Инициализация обработчика токсичности toxicity_handler = ToxicityHandler() @celery_app.task