Spaces:
Running
Running
File size: 3,440 Bytes
7d41bbc ef215a0 fb0ab55 d6c810d 7966fd3 fb0ab55 048caf2 b758f58 d6c810d 048caf2 7d41bbc bfcaca7 05039dd d6c810d 7d41bbc d6c810d bfcaca7 fb0ab55 048caf2 fb0ab55 048caf2 fb0ab55 048caf2 d6c810d fb0ab55 7d41bbc 05039dd 067221c 7d41bbc 980abe2 048caf2 067221c 048caf2 bf42b73 048caf2 7966fd3 |
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
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=["*"],
)
@app.post("/api/summarize")
async def summarize_api(data: dict):
"""REST API для локальной суммаризации"""
text = data.get("text", "")
return {"summary": summarize_text(text)}
@app.post("/pipeline/analyze_text")
async def analyze_text(data: dict):
"""
Этот endpoint принимает текст от пользователя
и возвращает краткое резюме через Eroha Summarizer PRO.
"""
text = data.get("text", "")
summary = summarize_via_hf(text)
return {"summary": summary}
@app.get("/metrics/test")
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
|