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