LegendaryFred Quantization
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!
Example outputs
Хабрастатьи тут и немного тут.
Фред - невероятно креативная модель. Многие ещё его хвалят за маск-токены и возможность продолжать текст с середины. Но у него есть смертельная проблема для старых LLM (ну и многих новых тоже касается) - он нереально любит повторяться, а если repetition penalty перебрать, то будет нести совсем чушь...
Getting started
1. Installation
uv pip install ctranslate2 tokenizers jinja2
2. Loading
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)
3. Usage
# ================= ПРИМЕР ИСПОЛЬЗОВАНИЯ =================
# Инициализация (загрузит с 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)
Origin
Developing
Converted with PAIN using ctranslate2
- Downloads last month
- 15
Model tree for 3ndetz/fred-t5-xl-remastered-CT2
Base model
SiberiaSoft/SiberianFredT5-instructor