---
base_model:
- ai-sage/GigaChat-20B-A3B-base
language:
- ru
- en
license: mit
library_name: transformers
pipeline_tag: text-generation
---

# GigaChat-20B-A3B-instruct

Диалоговая модель из семейства моделей GigaChat, основная на [GigaChat-20B-A3B-base](https://huggingface.co/ai-sage/GigaChat-20B-A3B-base). Поддерживает контекст в 131 тысячу токенов.

This repository contains the instructed model of [GigaChat Family: Efficient Russian Language Modeling Through Mixture of Experts Architecture](https://huggingface.co/papers/2506.09440).

Больше подробностей в [хабр статье](https://habr.com/en/companies/sberdevices/articles/865996/).

**Для данной модели также доступны веса в [bf16](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct-bf16) и [int8](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct-int8)**

Upd. Перезалили веса в `.safetensors`

## Бенчмарки

|                | T-lite-instruct-0.1<br>(llama 3.0 8B based) | gemma-2-9b-it | GigaChat-20B-A3B-instruct |
|----------------|---------------------|---------------|---------------------------|
| MERA           | 0.335               | 0.392         | 0.513                     |
| ru-MMLU 5-shot | 0.555               | 0.625         | 0.598                     |
| Shlepa         | 0.36                | 0.388         | 0.482                     |


### Семейство GigaChat
|                                | GigaChat-20B-A3B-instruct | GigaChat-Pro v26.20 | GigaChat-Max v26.20 |
|--------------------------------|---------------------------|---------------------|---------------------|
| **Математические задачи**                                                                              |
| GSM8K 5-shot                   | 0,763                     | 0,782               | 0,929               |
| MATH 4-shot                    | 0,426                     | 0,446               | 0,53                |
| **Написание кода**             |                           |                     |                     |
| HumanEval 0-shot               | 0,329                     | 0,439               | 0,64                |
| MBPP 0-shot                    | 0,385                     | 0,487               | 0,667               |
| **Общие знания**                                                                                 |
| MMLU EN 5-shot                 | 0,648                     | 0,687               | 0,804               |
| MMLU RU 5-shot<br>Переведенные данные из MMLU EN 5-shot | 0,598 | 0,645               | 0,75              |
| MMLU RU 1-shot                 | —                         | 0,617               | 0,718               |
| MMLU PRO EN 5-shot             | 0,348                     | 0,431               | 0,589               |
| RUBQ 0-shot                    | 0,675                     | 0,724               | 0,73                |
| WINOGRANDE 4-shot              | 0,75                      | 0,796               | 0,832               |
| CyberMetric 0-shot             | 0,798                     | 0,827               | 0,864               |
| **Следование инструкциям**                       |
| IFEval 0-shot                  | 0,411                     | 0,566               | 0,721               |

<details>
<summary>Особенности замеров</summary>
GSM8k — это тест, который проверяет, как хорошо модели могут решать задачи с числами. В нашем исследовании мы использовали 5 шотов, чтобы оценить модель, и смотрели на последнее число в ответе. В оригинальное тесте ответ ищется по шаблону: ‘### число’.
 
Тест Math тоже имеет разные версии, которые проверяют математические способности моделей. В нашем исследовании мы давали 4 примера и смотрели на последнее выражение в формате '\boxed{expression}'. Затем оценивали результаты на совпадение с помощью библиотеки sympy.

</details>


## Requirements

* ```transformers>=4.47```




## Пример использования через transformers



```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto")
model.generation_config = GenerationConfig.from_pretrained(model_name)

messages = [
    {"role": "user", "content": "Докажи теорему о неподвижной точке"}
]
input_tensor = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
outputs = model.generate(input_tensor.to(model.device))

result = tokenizer.decode(outputs[0][input_tensor.shape[1]:], skip_special_tokens=False)
print(result)
```


## Пример использования через vLLM

```python
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name, trust_remote_code=True)
sampling_params = SamplingParams(temperature=0.3, max_tokens=8192)

messages_list = [
    [{"role": "user", "content": "Докажи теорему о неподвижной точке"}],
]

prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]

outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)

generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
```


В GigaChat-20B-A3B-instruct используется особый способ токенизации текста, поэтому **не рекомендуется** следующий сценарий 

```python
input_string = tokenizer.apply_chat_template(messages,tokenize=False, add_generation_prompt=True)
input_tensor = tokenizer(input_string, return_tensors="pt")
```


## Пример использования vLLM server


Запуск сервера

```bash
vllm serve ai-sage/GigaChat-20B-A3B-instruct  \
  --disable-log-requests \
  --trust_remote_code \
  --dtype bfloat16 \
  --max-seq-len 8192
```

Пример запроса
```bash
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai-sage/GigaChat-20B-A3B-instruct" ,
        "messages": [
            {"role": "system", "content": "Ты ОЧЕНЬ умный математик"},
            {"role": "user", "content": "Докажи теорему о неподвижной точке"}
        ]
    }'
```