--- 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 Original Misral Nemo prompt format, but the system prompt is in the beginning: ``` Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им. [INST] Как дела? [/INST] Отлично, а у тебя? [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: Трава зеленая из-за хлорофилла, который содержится в клетках растений. Хлорофилл — это пигмент, отвечающий за процесс фотосинтеза, при котором растения преобразуют световую энергию солнца в химическую энергию для роста и развития. Зеленый цвет хлорофилла маскирует все другие пигменты клеток, такие как каротиноиды (которые обычно дают оранжевый или красный оттенок), делая листья и траву преимущественно зелеными. ``` ``` User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч Saiga: Таня и Мяч Таня стояла на берегу широкой речки, вдыхая свежий утренний воздух. В руках она держала небольшой, но такой яркий мяч, что он казался маленьким солнцем, вырвавшимся из ладоней. Этот мяч был не просто игрушкой; для Тани он хранил воспоминания о самых счастливых моментах её жизни. Мяч был найден ею в прошлом году в старом заброшенном саду, который по слухам принадлежал давно ушедшему волшебнику. Внешне он выглядел как обычный резиновый шар, только покрытый узорами, напоминающими созвездия. Именно после того дня, когда Таня впервые коснулась этого мяча, в её жизнь вошли чудеса. Сначала незначительные — мяч всегда возвращался к ней после броска, даже если его отправляли за пределы видимости. А однажды, когда Таня грустно сидела под дождём, мяч вдруг засветился мягким тёплым светом, защитив девочку от мокрых капель. С тех пор между ними установилась особая связь. Речка, плещущая перед Таней, была границей двух миров: серого повседневного и той тайны, которая, как ей казалось, начиналась здесь. Сегодня утром, проснувшись от первых лучей солнца, Таня почувствовала зов приключения. Её рука сама потянулась к мячу, и тот, будто живой, тепло отозвался на прикосновение. "Пора," — шепнула Таня, крепче обхватив мяч. Она осторожно подняла его над водной гладью, закрыв глаза. "Покажи мне, куда идти". Мяч, словно послушный друг, взмыл вверх, ослепительно вспыхнул и, плавно описывая дугу, полетел над рекой, остановившись лишь там, где вода темнела, обещая скрывать нечто таинственное. Таня без колебаний прыгнула вслед, ощутив, как мяч окутал её мягким сиянием, облегчая падение в холодную воду. Подводный мир встретил её неожиданным великолепием: сверкающие рыбы, подобные драгоценностям, плавали вокруг, а камни, устилавшие дно, складывались в странные узоры, похожие на письмена древних языков. Мяч светил, указывая дорогу сквозь водоросли, пока Таня не увидела вход в пещеру, украшенный морскими раковинами и блестящими кристаллами. Там, где кончались воды реки, начинался новый путь. В глубинах пещеры Таня обнаружила комнату, где стены были сплошь покрыты картинами. На них оживала история мира, полная загадок и приключений, таких, о которых она читала в книгах, но которые теперь становились реальностью. Среди героев одной из сцен Таня узнала себя — девочку с мячом, освещающим путь. Рядом с ней стоял мальчик, которого она никогда раньше не видела, но почему-то сразу поняла, что это её верный спутник, ждавший встречи в этом подземелье. Когда они встретились, мяч закружился вокруг обоих, создавая танец света, который сливал их судьбы воедино. Мальчик представился — его звали Миша. Оказалось, что мяч тоже принадлежит ему, но однажды улетел далеко-далеко и вернулся к Тане, чтобы вернуть их вместе. Так началось их совместное путешествие через миры, созданные фантазией и магией, где каждый шаг раскрывал новые страницы их общей истории. С годами Таня и Миша оставались верными друзьями, хранителями секретов и защитниками чудес, которые прятались в самых обычных предметах, как в случае с мячом. А когда кто-то спрашивал, как же всё это началось, они просто улыбались и показывали мяч, уже немного потрепанный, но все так же сияющий звёздным светом. Их взгляд говорил о приключениях, о смелости и вере в то, что каждое детство способно стать дверью в настоящую магию. ``` ## Versions 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 ### 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)