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

  • Base model
  • Finetune of Base model I used for this convertation

Developing

Converted with PAIN using ctranslate2

Downloads last month
15
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for 3ndetz/fred-t5-xl-remastered-CT2

Finetuned
(2)
this model