Saiga/Llama3 8B, Russian Llama-3-based chatbot

Based on Llama-3 8B Instruct.

Llama.cpp version: link

Colab: link

Prompt format

ОСТОРОЖНО! WARNING! LET OP!

I've changed the prompt format from ChatML to the original Llama-3 format in v4. Don't forget to switch formats!

v4, v5, v6+: LLama-3 prompt format:

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.<|eot_id|><|start_header_id|>user<|end_header_id|>

Как дела?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

Отлично, а у тебя?<|eot_id|><|start_header_id|>user<|end_header_id|>

Шикарно. Как пройти в библиотеку?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

v2, v3: ChatML prompt format:

<|im_start|>system
Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.<|im_end|>
<|im_start|>user
Как дела?<|im_end|>
<|im_start|>assistant
Отлично, а у тебя?<|im_end|>
<|im_start|>user
Шикарно. Как пройти в библиотеку?<|im_end|>
<|im_start|>assistant

Code example

# Исключительно ознакомительный пример.
# НЕ НАДО ТАК ИНФЕРИТЬ МОДЕЛЬ В ПРОДЕ.
# См. https://github.com/vllm-project/vllm или https://github.com/huggingface/text-generation-inference

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig

MODEL_NAME = "IlyaGusev/saiga_llama3_8b"
DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."

model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    load_in_8bit=True,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
model.eval()

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
print(generation_config)

inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
for query in inputs:
    prompt = tokenizer.apply_chat_template([{
        "role": "system",
        "content": DEFAULT_SYSTEM_PROMPT
    }, {
        "role": "user",
        "content": query
    }], tokenize=False, add_generation_prompt=True)
    data = tokenizer(prompt, return_tensors="pt", add_special_tokens=False)
    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).strip()
    print(query)
    print(output)
    print()
    print("==============================")
    print()

Output examples

User: Почему трава зеленая? 
Saiga: Трава выглядит зеленым из-за наличия в ней хлорофилла – пигмента, который помогает растениям поглощать солнечную энергию для процесса фотосинтеза.
Хлорофилл поглощает световые лучи с длиной волны 400-500 нанометров (ближе к синему) и отражает лучи с длиной волны 600-700 нанометров (ближе к красному), что делает его видимым как зеленый цвет.
Таким образом, зеленый цвет является результатом того, как хлорофилл взаимодействует со светом, обеспечивая растения необходимой энергии для роста и развития.
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
Saiga: В небольшой деревушке под открытым небом жила девочка по имени Таня. Она была очень активной и любящей играть в различные виды спорта. Однажды, когда она прогуливалась по полям, увидела на земле лежащий мяч. Это был старый, но все еще пригодный для игры мячик.
Таня сразу же решила взять его себе домой и показать своему другу Мише. Мишка тоже обожал футбол и всегда рад был бы провести время вместе со своими друзьями. Когда они вернулись домой, Таня показала ему найденный мячик и предложила сыграть в футбол.
Мишка был счастлив, что у них появился новый мяч, и они сразу же начали готовиться к матчу. Они построили две команды и начали игру. Играли они до вечера, а потом решили сделать перерыв и приготовить ужин.
После ужина они продолжили игру, теперь уже с большим энтузиазмом и страстью. В конце концов, победителем стала команда Тани, которая забила больше голов. Все закончилось веселым праздником и хорошими воспоминаниями о проведенном времени.
На следующий день Таня и Миша решили пригласить своих других друзей на игру. Они собрали всех в одном месте и провели ещё один захватывающий матч. Этот день также стал незабываемым благодаря новому мячу, который принес так много радости и улыбок.
Итак, этот маленький мяч, который Таня нашла на поле, стал не просто предметом для игр, но и символом дружбы и веселья между детьми. Он помог им создать незабываемые моменты и укрепил их отношения.

Versions

v7:

v6:

v5:

v4:

v3:

v2:

Evaluation

Pivot: chatgpt_3_5_turbo

model length_controlled_winrate win_rate standard_error avg_length
chatgpt_4_turbo 76.04 90.00 1.46 1270
chatgpt_3_5_turbo 50.00 50.00 0.00 536
saiga_llama3_8b, v6 49.33 68.31 2.26 1262
sfr-iter-dpo 49.11 74.94 2.13 1215
suzume 49.05 71.57 2.20 1325
saiga_llama3_8b, v7 48.95 69.40 2.25 1266
saiga_llama3_8b, v5 47.13 66.18 2.31 1194
saiga_llama3_8b, v4 43.64 65.90 2.31 1200
saiga_llama3_8b, v3 36.97 61.08 2.38 1162
saiga_llama3_8b, v2 33.07 48.19 2.45 1166
saiga_mistral_7b 23.38 35.99 2.34 949

Pivot: sfr

model length_controlled_winrate win_rate standard_error avg_length
sfr 50.00 50.00 0.00 1215
saiga_llama3_8b, v7 48.95 49.16 2.46 1266
saiga_llama3_8b, v6 46.91 47.23 2.45 1262
suzume_8b 43.69 48.19 2.46 1325
Downloads last month
11,877
Safetensors
Model size
8.03B params
Tensor type
BF16
·
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Model tree for IlyaGusev/saiga_llama3_8b

Adapters
10 models
Finetunes
11 models
Merges
9 models
Quantizations
21 models

Dataset used to train IlyaGusev/saiga_llama3_8b

Spaces using IlyaGusev/saiga_llama3_8b 8

Collection including IlyaGusev/saiga_llama3_8b