eroha-agentapi / app.py
Yermek68's picture
added metrics tracking and logger
d6c810d verified
raw
history blame
3.44 kB
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