Spaces:
Running
Running
| import gradio as gr | |
| from transformers import pipeline | |
| from fastapi import FastAPI | |
| import time | |
| from datetime import datetime | |
| import logging | |
| from summarizer import summarize_via_hf | |
| from fastapi.middleware.cors import CORSMiddleware | |
| import os | |
| # Настройка логирования | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format="%(asctime)s | %(levelname)s | %(message)s", | |
| ) | |
| logger = logging.getLogger("ErohaSummarizer") | |
| # 1. Модель суммаризации (ленивая загрузка) | |
| summarizer = None | |
| def summarize_text(text: str): | |
| """Функция суммаризации текста с метриками""" | |
| start_time = time.time() | |
| global summarizer | |
| try: | |
| if summarizer is None: | |
| summarizer = pipeline("summarization", model="facebook/bart-large-cnn") | |
| result = summarizer(text, max_length=180, min_length=50, do_sample=False) | |
| summary = result[0]["summary_text"] | |
| # Метрики | |
| elapsed = round(time.time() - start_time, 3) | |
| metrics = { | |
| "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), | |
| "input_length": len(text), | |
| "summary_length": len(summary), | |
| "processing_time_sec": elapsed, | |
| "status": "success", | |
| } | |
| logger.info(f"[METRICS] {metrics}") | |
| return summary | |
| except Exception as e: | |
| elapsed = round(time.time() - start_time, 3) | |
| logger.error(f"[ERROR] {e} | time={elapsed}s") | |
| return f"Ошибка: {e}" | |
| # 2. FastAPI-приложение (для REST API) | |
| app = FastAPI(title="Eroha Summarizer PRO") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| async def summarize_api(data: dict): | |
| """REST API для локальной суммаризации""" | |
| text = data.get("text", "") | |
| return {"summary": summarize_text(text)} | |
| async def analyze_text(data: dict): | |
| """ | |
| Этот endpoint принимает текст от пользователя | |
| и возвращает краткое резюме через Eroha Summarizer PRO. | |
| """ | |
| text = data.get("text", "") | |
| summary = summarize_via_hf(text) | |
| return {"summary": summary} | |
| def test_metrics(): | |
| """ | |
| Тестовый endpoint — показывает пример метрики. | |
| """ | |
| example = { | |
| "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), | |
| "input_length": 250, | |
| "summary_length": 80, | |
| "processing_time_sec": 1.23, | |
| "status": "success" | |
| } | |
| return {"metrics_example": example} | |
| # 3. Gradio интерфейс (веб-интерфейс) | |
| iface = gr.Interface( | |
| fn=summarize_text, | |
| inputs=gr.Textbox(lines=10, label="Введите текст для суммаризации"), | |
| outputs=gr.Textbox(label="Результат"), | |
| title="Eroha Summarizer PRO", | |
| description="AI-инструмент для анализа и суммаризации текста (рус/англ)." | |
| ) | |
| # 4. Автоматический выбор режима | |
| if __name__ == "__main__": | |
| # Если запущено вручную — Gradio | |
| iface.launch(server_name="0.0.0.0", server_port=7860, share=False) | |
| else: | |
| # Если внутри контейнера Hugging Face — FastAPI | |
| app | |