Downloads · 30 days
8
17% of all-time downloads
3ndetz/fred-t5-xl-remastered-CT2
fred-t5-xl-remastered-CT2 is a text generation model from 3ndetz. Use it when you need the model to write or continue text. The card lists the license as mit.
The FredT5 XL. The legendary. The BEST nick analyzer ever!
Downloads · 30 days
8
17% of all-time downloads
All-time downloads
48
Public
Repo size
1.7 GB
Likes
0
Public
Click a slice to open those files.
.bin1.7 GB · 99%
From the Hugging Face model README
The FredT5 XL. The legendary. The BEST nick analyzer ever!
End of 2025 year: still NO models (even 100B+) can beat FRED-T5-1.7b (2023 SOTA for Russian language) in sense of trash nicknames analyzing...
I quantized the model using ctranslate2 toolkit because want to run it everywhere without heavy libs like transformers + torch, etc. GGUF failed for this custom T5 model with custom GPT2 tokenizer that don't work with it...
So, now I just want this model to revive. This endless creativity of FRED will be reminded forever!
Lower you can see example outputs, installing and loading example.
Of course, I AM NOT creator of the model! All credits to the respectful authors!
Хабрастатьи тут и немного тут.
Фред - невероятно креативная модель. Многие ещё его хвалят за маск-токены и возможность продолжать текст с середины. Но у него есть смертельная проблема для старых LLM (ну и многих новых тоже касается) - он нереально любит повторяться, а если repetition penalty перебрать, то будет нести совсем чушь...
uv pip install ctranslate2 tokenizers jinja2
Gemini написал вот такую красоту. На здоровье! Просто суньте в код.
import os
from ctranslate2 import Translator
from tokenizers import Tokenizer
from jinja2 import Template
class FredRemasteredModel:
def __init__(self, model_name_or_path, device="auto"):
self.device = device
# 1. Логика загрузки (HF Hub -> Local Fallback)
if os.path.exists(model_name_or_path):
model_dir = model_name_or_path
else:
try:
from huggingface_hub import snapshot_download
print(f"📥 Скачиваю {model_name_or_path}...")
model_dir = snapshot_download(repo_id=model_name_or_path)
except ImportError:
print(f"⚠️ HuggingFace Hub не найден или ошибка. Пробую путь: {model_name_or_path}")
model_dir = model_name_or_path
# 2. Инициализация движка и токенизатора
self.generator = Translator(model_dir, device=self.device)
self.tokenizer = Tokenizer.from_pretrained(model_name_or_path)
# Если from_pretrained не сработает без инета, можно: Tokenizer.from_file(os.path.join(model_dir, "tokenizer.json"))
# 3. Шаблон чата (компилируем один раз)
self.template = Template(
"<SC6>{% for message in messages %}"
"{% if message['role'] == 'system' %}{{ message['content'] }}"
"{% elif message['role'] == 'user' %}{{ message['content'] }}"
"{% elif message['role'] == 'assistant' %}<s>{{ message['content'] }}</s>"
"{% endif %}{% endfor %}"
"{% if add_generation_prompt %}<s><extra_id_0>{% endif %}"
)
def _generate_raw(self, input_text, **kwargs):
# Кодируем
tokens = self.tokenizer.encode(input_text).tokens
# Генерируем
results = self.generator.translate_batch(
[tokens],
max_decoding_length=kwargs.get("max_length", 128),
sampling_topk=kwargs.get("top_k", 50),
sampling_temperature=kwargs.get("temperature", 0.9),
return_end_token=False
)
# Декодируем (Фикс проблемы ctranslate2 -> tokenizers)
output_tokens = results[0].hypotheses[0]
# Превращаем токены обратно в ID, пропуская неизвестные, чтобы декодер собрал UTF-8
ids = [self.tokenizer.token_to_id(t) for t in output_tokens if self.tokenizer.token_to_id(t) is not None]
return self.tokenizer.decode(ids, skip_special_tokens=True)
def completion(self, text, add_special_tokens=True, **kwargs):
# Если add_special_tokens=False, пользователь сам расставил теги, иначе добавляем дефолт
prompt = text if not add_special_tokens else f"<SC6>{text}<extra_id_0>"
return self._generate_raw(prompt, **kwargs)
def chat(self, messages, **kwargs):
# Рендерим шаблон
prompt = self.template.render(messages=messages, add_generation_prompt=True)
print("prompt", prompt)
return self._generate_raw(prompt, **kwargs)
# ================= ПРИМЕР ИСПОЛЬЗОВАНИЯ =================
# Инициализация (загрузит с HF при первом запуске)
print("--- Chat ---")
response = model.chat([
{"role": "assistant", "content": "Ты вежливый консультант. Отвечай на вопросы."},
{"role": "user", "content": "Привет, как дела?"},
], temperature=0.6)
print(response)
# Спасибо, все хорошо. Чем могу помочь?
print("\n--- Simple completion ---")
print(model.completion("Продолжи фразу: Жили были дед и"))
print("\n--- Raw Completion ---")
# Ручной режим
raw_response = model.completion(
"<SC6>Продолжи фразу: Жили были дед и<extra_id_0>",
add_special_tokens=False
)
print(raw_response)
Converted with PAIN using ctranslate2