File size: 2,909 Bytes
470297a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c1c11a
470297a
 
8c1c11a
5bb03c8
 
 
 
 
 
8c1c11a
470297a
 
 
 
 
 
 
 
 
 
 
 
8c1c11a
470297a
5bb03c8
470297a
 
 
5bb03c8
 
 
 
 
 
470297a
5bb03c8
 
 
8c1c11a
470297a
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
# from config import model_sum
# from transformers import AutoTokenizer, T5ForConditionalGeneration
# import torch
#
#
# tokenizer = AutoTokenizer.from_pretrained(model_sum)
# model=T5ForConditionalGeneration.from_pretrained(model_sum)
#
#
# def summarize_text(text:str)->str:
#     try:
#         tokenizer.pad_token=tokenizer.eos_token
#         input_text = "summarize: " + text #Обязательный префикс для задачи суммаризации в T5
#         input_ids=tokenizer([input_text],
#                          max_length=600,
#                          add_special_tokens=True,
#                          padding='max_length',
#                          truncation=True,
#                          return_tensors='pt')['input_ids']
#         with torch.no_grad():
#             output_ids=model.generate(
#                 input_ids=input_ids,
#                 max_length=200,
#                 min_length=30,
#                 no_repeat_ngram_size=4, #Запрещает повторение 4-грамм — текст становится более связным
#                 num_beams=4,       # поиск по лучам для улучшения качества
#                 early_stopping=True #Останавливает генерацию, когда все лучи достигли конца
#             )[0]
#
#         summary = tokenizer.decode(output_ids, skip_special_tokens=True)
#         return summary
#     except Exception as e:
#         return f"Error {str(e)}"

import os
import requests



API_URL = "https://router.huggingface.co/hf-inference/models/cointegrated/rut5-base-absum"
headers = {
    "Authorization": f"Bearer {os.environ['HF_TOKEN']}",
}

def summarize_text(text: str) -> str:
    if not text.strip():
        return "Текст пуст."
    payload = {
        "inputs": text,
        "parameters": {
            "max_length": 200,
            "min_length": 30,
            "num_beams": 4,
            "early_stopping": True
        }
    }
    try:
        response = requests.post(API_URL, headers=headers, json=payload, timeout=30)
        response.raise_for_status() # выбросит исключение при HTTP-ошибке
        result = response.json()
        # Для T5 результат — список с полем 'summary_text'
        if isinstance(result, list) and len(result) > 0:
            summary = result[0].get('summary_text')
            if summary is None:
                summary = result[0].get('generated_text', 'Не удалось получить пересказ')
            return summary
        else:
            return str(result)
        return str(result)
    
    except requests.exceptions.RequestException as e:
        return f"Ошибка сети при вызове API: {str(e)}"
    except Exception as e:
        return f"Ошибка API: {str(e)}"