Safetensors
Russian
mistral
File size: 14,646 Bytes
8451b99
 
 
 
 
 
 
 
 
 
 
 
 
 
a4ec6bc
8451b99
fe2154c
8451b99
 
 
1e4b6f8
 
 
 
5fc24e5
1e4b6f8
 
 
8451b99
 
211f088
c588ef6
8451b99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e0e1696
8451b99
 
 
 
 
 
 
 
 
 
 
 
2ae4ce5
59d975f
 
 
 
 
8451b99
 
 
 
2ae4ce5
781666a
 
 
 
 
 
 
8451b99
 
 
 
2ae4ce5
59d975f
 
 
 
 
 
 
 
 
 
2ae4ce5
5dc8fb8
2ae4ce5
 
 
 
 
 
 
 
 
 
8451b99
2ae4ce5
 
8451b99
 
 
 
47fd3a6
 
8451b99
 
 
 
59d975f
 
 
 
eececbd
59d975f
 
 
 
 
2ae4ce5
5dc8fb8
69eaab9
 
 
 
5dc8fb8
 
 
2ae4ce5
 
 
47fd3a6
 
 
752255e
 
67ba691
752255e
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
---
language:
- ru
datasets:
- IlyaGusev/saiga_scored
- IlyaGusev/saiga_preferences
license: apache-2.0
---


# Saiga/MistralNemo 12B, Russian fine-tune of Mistral Nemo

Based on [an abliterated version](https://huggingface.co/natong19/Mistral-Nemo-Instruct-2407-abliterated) of [Mistral Nemo](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407).

Llama.cpp version: [link](https://huggingface.co/IlyaGusev/saiga_nemo_12b_gguf)

Colab: [link](https://colab.research.google.com/drive/1vNzMyPqx2GB7zk3ANDtZEfvhzgYOWu0B)

## Prompt format

v3: Original Misral Nemo prompt format, but the system prompt is in the beginning:
```
<s>Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.

[INST]Как дела?[/INST][INST]Шикарно. Как пройти в библиотеку?[/INST]
```

v1, v2: Original Misral Nemo prompt format, but the system prompt is in the beginning and there are additional spaces:
```
<s>Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.

[INST] Как дела? [/INST] Отлично, а у тебя? </s>[INST] Шикарно. Как пройти в библиотеку? [/INST]
```

## Code example
```python
# Исключительно ознакомительный пример.
# НЕ НАДО ТАК ИНФЕРИТЬ МОДЕЛЬ В ПРОДЕ.
# См. 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_nemo_12b"

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": "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()}
    data.pop("token_type_ids", None)
    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: Трава зеленая из-за содержания хлорофилла. Hлорофилл — это пигмент, основной компонент системы фотосинтеза в растениях (а также водорослях и некоторых бактериях). Функционирование хлорофилла обеспечивает следующие особенности:
1. **Абсорбция света**: Хлорофилл поглощает свет в определенном диапазоне спектра, в основном синий и красный цвета. Зеленый цвет отражается обратно к нашему глазу, поскольку именно этот цвет не поглощается хлорофиллом.
2. **Фотосинтез**: В процессе фотосинтеза хлорофилл преобразует энергию солнечного света в химическую энергию, необходимую для синтеза органических веществ (главным образом глюкозы) из углекислого газа и воды. Этот процесс поддерживает жизнь растений и является источником пищи для многих живых существ на Земле.
3. **Структурная роль**: Хлорофилл расположен в особой структуре клеток растений – хлоропластах, которые играют ключевую роль в организации клетки.
Таким образом, трава зеленая потому, что хлорофилл выполняет жизненно важную функцию в растении и отражает именно тот цвет света, который он не использует в своем процессе работы.
```

```
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
Saiga: Таня и Мяч
В далеком приморском городке, где ласковое солнце играло на волнах и свежий морской ветер наполнял воздух солью и свободой, жила девушка по имени Таня. Ее жизнь была полна ярких красок и незабываемых историй — и все благодаря одному простому предмету: мячу.
Таня появилась в этом мире уже с мячом под мышкой. Ее отец, заядлый футбольный фанат, еще до рождения дочери решил, что она продолжит семейную спортивную традицию. И вот, когда маленькая Таня впервые сделала свои неуверенные шаги, в ее ручке оказался тот самый мяч — бледно-голубой, как небо над морем, с рисунком в виде волны, словно приглашая к приключениям.
С тех пор мяч стал для Тани настоящим другом и спутником жизни. Они начинали каждое утро вместе: на песке у пляжа, где отпечатки ног смешивались с влажными линиями прилива; иногда на стадионе, где запахи травы и свежей росы сопровождали первые удары об мяч; а зимними днями — в просторном школьном коридоре, куда Таня выносила мяч, чтобы тренироваться прямо там, среди шумных перерывов и звонков.
Мяч был свидетелем всех ключевых моментов ее жизни. Когда Таня в первый раз забила гол в школьной команде, он, казалось, излучал радость и гордость. Этот мяч побывал в каждом уголке города: они исследовали заброшенные склады, где Таня представляла себя героиней фильма о футболе; забрались на вершину старого маяка, откуда открывался вид на бескрайнее море; даже однажды ночью пытались пройти через весь город, запуская мяч от стены к стене, создавая свой собственный «марафон».
Самый значительный эпизод их совместного пути произошел летом, когда Таня решила принять участие в региональных соревнованиях по футболу. Мяч, который уже успел потерять немного своей первоначальной гладкости и белизны, приобрел особое значение. Это был не просто мяч — это символ мечты, которую она носила внутри себя. В день финального матча Таня почувствовала, как каждый удар об этот мяч наполняет ее уверенностью и теплом воспоминаний. На последних минутах встречи, когда счет был равным, Таня ловко обвела соперниц и, сделав красивый финт, послала мяч точно в ворота противника. Зрители взорвались аплодисментами, а Таня упала на колени, крепко обнимая своего верного друга.
После победы Таня поняла, что мяч стал частью её души. Его история переплеталась со всеми важными моментами её жизни. Она решила сохранить его таким, какой он есть — слегка потрепанным, но полным истории и воспоминаний. Таня повесила мяч на стену в своей комнате, рядом с фотографиями друзей, трофеев и других дорогих сердцу предметов. Теперь он смотрел на неё, напоминая о том, что путь к мечтам долгий, но каждая ступень этого пути полна смысла и радости.
И хотя со временем Таня увлеклась другими аспектами жизни — путешествиями, учебой, новыми увлечениями — мяч всегда оставался напоминанием о том, как важно сохранять искренность намерений и верность своим мечтам. А иногда, поздними вечерами, когда в городе наступала тишина, Таня доставала мяч из коробки, где он хранился, и несколько минут просто крутила его в руках, возвращаясь в те золотые дни детства и юности, наполненные беззаботностью и радостью первого большого приключения.
```


## Versions

v3:
 - [d4f395741d0d363665e86533b53d5a2ec14477eb](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/d4f395741d0d363665e86533b53d5a2ec14477eb)
 - Other names: saiga_nemo_12b_sft_m10_d16_simpo_m23_d38
 - SFT dataset config: [sft_d16.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d16.json)
 - SFT model config: [saiga_nemo_12b_sft_m10.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m10.json)
 - SimPO dataset config: [pref_d38.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d38.json)
 - SimPO model config: [saiga_nemo_12b_simpo_m23.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m23.json)
 - SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/hzs68let)
 - SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/hyz52bom)

v2:
- [2ae4ce589c6c1c0ef3ba26521d78882ae1ae2930](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/2ae4ce589c6c1c0ef3ba26521d78882ae1ae2930)
- Other names: saiga_nemo_12b_sft_m9_d16_slerp, saiga_nemo_12b_sft_m9_d16_simpo_m21_d36_doestoevsky_orpo_m1_slerp
- SFT dataset config: [sft_d16.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d16.json)
- SFT model config: [saiga_nemo_12b_sft_m9.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m9.json)
- SimPO dataset config: [pref_d36.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d36.json)
- SimPO model config: [saiga_nemo_12b_simpo_m21.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m21.json)
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/yod78hiq)
- SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/bv5w0lxl)
- Dostoevsky wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/senqj9t1)
- Merge config: [link](https://huggingface.co/IlyaGusev/saiga_nemo_12b_sft_m9_d16_slerp/blob/main/mergekit_config.yml)

v1:
- [1c13507be4b5b5edd5586e48c902ef61c0343299](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/1c13507be4b5b5edd5586e48c902ef61c0343299)
- Other name: saiga_nemo_12b_sft_m9_d14_simpo_m19_d31
- SFT dataset config: [sft_d14.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d14.json)
- SFT model config: [saiga_nemo_12b_sft_m9.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m9.json)
- SimPO dataset config: [pref_d31.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d31.json)
- SimPO model config: [saiga_nemo_12b_simpo_m19.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m19.json)
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/e74ozfzh)
- SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/b094iiej)


## Evaluation

### v3:

RuArenaHard:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/tTTHRqxwrLnhj7LEeFmsU.png)

PingPong:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/4VxQJjAxw2eQMYctUvBr5.png)

### v2

RuArenaHard:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/dn5BAxdsYsMfO0oGYH2Zb.png)

PingPong:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/tlxLQORAmGQpkJa6OeLBh.png)

### v1

RuArenaHard:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/-uG--3Wu9oUi9_bC_ZFP4.png)


PingPong:

![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/uNmD2YhealySO6UYUH8-g.png)