YAML Metadata Warning: The pipeline tag "conversational" is not in the official list: text-classification, token-classification, table-question-answering, question-answering, zero-shot-classification, translation, summarization, feature-extraction, text-generation, text2text-generation, fill-mask, sentence-similarity, text-to-speech, text-to-audio, automatic-speech-recognition, audio-to-audio, audio-classification, audio-text-to-text, voice-activity-detection, depth-estimation, image-classification, object-detection, image-segmentation, text-to-image, image-to-text, image-to-image, image-to-video, unconditional-image-generation, video-classification, reinforcement-learning, robotics, tabular-classification, tabular-regression, tabular-to-text, table-to-text, multiple-choice, text-retrieval, time-series-forecasting, text-to-video, image-text-to-text, visual-question-answering, document-question-answering, zero-shot-image-classification, graph-ml, mask-generation, zero-shot-object-detection, text-to-3d, image-to-3d, image-feature-extraction, video-text-to-text, keypoint-detection, any-to-any, other

Saiga 30B, Russian LLaMA-based chatbot

Based on LLaMA 30B.

This is an adapter-only version.

Colab: link

Llama.cpp version: link

Training code: link

from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig

MODEL_NAME = "IlyaGusev/saiga_30b_lora"
DEFAULT_MESSAGE_TEMPLATE = "<s>{role}\n{content}</s>\n"
DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."

class Conversation:
    def __init__(
        self,
        message_template=DEFAULT_MESSAGE_TEMPLATE,
        system_prompt=DEFAULT_SYSTEM_PROMPT,
        start_token_id=1,
        bot_token_id=9225
    ):
        self.message_template = message_template
        self.start_token_id = start_token_id
        self.bot_token_id = bot_token_id
        self.messages = [{
            "role": "system",
            "content": system_prompt
        }]

    def get_start_token_id(self):
        return self.start_token_id

    def get_bot_token_id(self):
        return self.bot_token_id

    def add_user_message(self, message):
        self.messages.append({
            "role": "user",
            "content": message
        })

    def add_bot_message(self, message):
        self.messages.append({
            "role": "bot",
            "content": message
        })

    def get_prompt(self, tokenizer):
        final_text = ""
        for message in self.messages:
            message_text = self.message_template.format(**message)
            final_text += message_text
        final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
        return final_text.strip()

def generate(model, tokenizer, prompt, generation_config):
    data = tokenizer(prompt, return_tensors="pt")
    data = {k: v.to(model.device) for k, v in data.items()}
    output_ids = model.generate(
        **data,
        generation_config=generation_config
    )[0]
    output_ids = output_ids[len(data["input_ids"][0]):]
    output = tokenizer.decode(output_ids, skip_special_tokens=True)
    return output.strip()

config = PeftConfig.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
    config.base_model_name_or_path,
    load_in_8bit=True,
    torch_dtype=torch.float16,
    device_map="auto"
)
model = PeftModel.from_pretrained(
    model,
    MODEL_NAME,
    torch_dtype=torch.float16
)
model.eval()

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_fast=False)
generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
print(generation_config)

inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
for inp in inputs:
    conversation = Conversation()
    conversation.add_user_message(inp)
    prompt = conversation.get_prompt(tokenizer)

    output = generate(model, tokenizer, prompt, generation_config)
    print(inp)
    print(output)
    print()
    print("==============================")
    print()

Examples:

User: Почему трава зеленая? 
Saiga: Трава зеленая потому, что она содержит хлорофилл - пигмент, который отвечает за зеленый цвет листьев растений. Хлорофилл используется для фотосинтеза - процесса преобразования света в энергию, необходимую для роста и развития растения. Кроме того, зеленый цвет является наиболее распространенным цветом среди всех растительных видов на Земле, поэтому большинство трав имеют зеленый цвет.
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
Saiga: Однажды летом, когда все дети уже вышли из школы и начали проводить время на улице, Таня решила поиграть в футбол со своими друзьями. Она взяла свой любимый мяч и отправилась к парку, где они обычно играют.
Когда она пришла туда, ее друзья уже были готовы к игре. Они разделились на две команды и начали играть. Таня была очень энергичной и активной, она бежала по полю, прыгала и ловила мяч.
Но однажды, когда она пыталась заблокировать удар соперника, мяч ударился ей прямо в лицо. Она упала на землю и не могла двигаться. Ее друзья сразу же подобрали ее и провели медицинскую помощь.
Так как Тане было больно, они решили не продолжать игру и вернуться домой. Но Таня не хотела пропустить возможность играть в футбол, поэтому она решила найти другой способ.
Она купила себе новый мяч и начала тренироваться дома. Она старалась делать упражнения каждый день, чтобы улучшить свою технику и скорость. Вскоре она стала лучшей футболисткой в своей команде.
Ее друзья были поражены ее умением играть в футбол и часто приглашали ее на матчи. Таня была очень горда своей новой профессией и никогда не переставала тренироваться.
В конце концов, благодаря своим усилиям, она стала настоящей звездой футбола и даже получила предложение от известного клуба. Она приняла его и начала играть на профессиональном уровне.
Таким образом, мяч стал для Тани не только игрушкой, но и источником ее успеха и счастья.
User: Реши уравнение 4x + 5 = 21
Saiga: Для решения этого уравнения нужно найти значение переменной x. Для этого нужно вычесть из левой части уравнения 5, чтобы получить 4x = 16. Далее, делим обе стороны на 4, чтобы получить x = 4. Таким образом, x равно 4.
User: Заполни пропуски в предложении. Дано: Я пытался ____ от маньяка, но он меня настиг
Saiga: Я пытался убежать от маньяка, но он меня настиг.

v2:

  • revision c7a77373a922758317582d55474a7c34478669e2
  • wandb link
  • 7 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch, ru_turbo_alpaca_evol_instruct (1/2 iterations), ru_instruct_gpt4
  • Datasets merging script: create_chat_set.py
  • saiga30b_v2 vs saiga30b_v1: 86-19-71

v1:

  • revision 8573592257aa6476e8179f09a922aff513592886
  • wandb link
  • 4 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch
  • Datasets merging script: create_chat_set.py
  • Loss: 0.817
  • Context length: 2000
  • Conversational template: "<s>{role}\n{content}</s>"
  • Possible roles: ["system", "user", "bot"]
  • System prompt: "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.

Datasets used to train IlyaGusev/saiga_30b_lora