# GLM-4.5, GLM-4.6, GLM-4.7

## Обзор

Языковые модели **GLM-4.7**, **GLM-4.6** и **GLM-4.5** используют этот класс. Реализация в transformers не включает слой MTP.

### GLM-4.7

**GLM-4.7**, ваш новый помощник по написанию кода, скоро появится со следующими возможностями:

- **Основное программирование**: GLM-4.7 демонстрирует заметный прогресс по сравнению с предшественником GLM-4.6 в многоязычном агентном программировании и задачах, основанных на терминале, в том числе (73,8%, +5,8%) на SWE-bench, (66,7%, +12,9%) на SWE-bench Multilingual и (41%, +16,5%) на Terminal Bench 2.0. GLM-4.7 также поддерживает режим «размышления перед действием», что обеспечивает значительное улучшение результатов на сложных задачах в таких популярных агентных фреймворках, как Claude Code, Kilo Code, Cline и Roo Code.
- **Vibe Coding**: GLM-4.7 делает большой шаг вперёд в улучшении качества пользовательского интерфейса. Модель генерирует более чистые и современные веб-страницы, а также создаёт более привлекательные слайды с более точным расположением элементов и размерами.
- **Использование инструментов**: GLM-4.7 демонстрирует значительные улучшения в использовании инструментов. Существенно лучшие результаты наблюдаются на бенчмарках, таких как τ^2-Bench, а также при веб-обзоре через BrowseComp.
- **Сложное рассуждение**: GLM-4.7 обеспечивает значительное повышение математических и логических возможностей, достигая (42,8%, +12,4%) на бенчмарке HLE (Humanity’s Last Exam) по сравнению с GLM-4.6.

В более общем случае значительные улучшения также наблюдаются во многих других сценариях, таких как чат, творческое письмо и ролевые игры.

![bench](https://raw.githubusercontent.com/zai-org/GLM-4.5/refs/heads/main/resources/bench_glm47.png)

**Чередующееся и сохраняемое рассуждение**

![thinking](https://raw.githubusercontent.com/zai-org/GLM-4.5/refs/heads/main/resources/thinking.png)

GLM-4.7 дополнительно улучшает **Interleaved Thinking** (функция, появившаяся начиная с GLM-4.5) и вводит **Preserved Thinking** и **Turn-level Thinking**. За счёт размышлений между действиями и сохранения согласованности между ходами модель делает выполнение сложных задач более стабильным и управляемым:
- **Чередующееся рассуждение**: модель рассуждает перед каждым ответом и вызовом инструмента, что улучшает следование инструкциям и качество генерации.
- **Сохранение размышлений**: в сценариях с агентом для написания кода модель автоматически сохраняет все блоки размышлений в рамках многоходового диалога, повторно используя уже имеющиеся рассуждения, а не выводя их заново. Это снижает потерю информации и противоречия, что делает подход хорошо подходящим для длительных и сложных задач.
- **Размышление на уровне хода**: модель поддерживает управление рассуждениями для каждого хода в рамках сессии — отключите размышления для лёгких запросов, чтобы снизить задержку и стоимость, и включите их для сложных задач, чтобы повысить точность и стабильность.

Подробнее: https://docs.z.ai/guides/capabilities/thinking-mode

Для получения дополнительных результатов оценки, примеров использования и технических деталей посетите [технический блог GLM-4.7](https://z.ai/blog/glm-4.7).

### GLM-4.6

По сравнению с GLM-4.5, **GLM-4.6** вносит несколько ключевых улучшений:

* **Более длинное контекстное окно:** Размер контекстного окна увеличен с 128K до 200K токенов, что позволяет модели обрабатывать более сложные агентные задачи.
* **Высокое качество генерации кода:** модель показывает более высокие результаты на бенчмарках по программированию и демонстрирует лучшую эффективность в реальных приложениях, таких как Claude Code, Cline, Roo Code и Kilo Code, включая улучшение генерации визуально отполированных фронтенд-страниц.
* **Расширенное рассуждение:** GLM-4.6 демонстрирует явное улучшение в производительности рассуждений и поддерживает использование инструментов во время инференса, что приводит к более сильной общей функциональности.
* **Более способные агенты:** GLM-4.6 демонстрирует более высокую производительность в агентах, использующих инструменты и поиск, и эффективнее интегрируется в агентные фреймворки.
* **Улучшенный стиль написания:** лучше соответствует человеческим предпочтениям в плане стиля и читаемости, а также ведёт себя более естественно в сценариях ролевых игр.

Мы оценили GLM-4.6 на восьми публичных бенчмарках, охватывающих агентов, рассуждения и программирование. Результаты демонстрируют явное превосходство над GLM-4.5, при этом GLM-4.6 сохраняет конкурентные преимущества перед ведущими отечественными и зарубежными моделями, такими как **DeepSeek-V3.1-Terminus** и **Claude Sonnet 4**.

Для получения дополнительных результатов оценки, примеров использования и технических деталей посетите [технический блог GLM-4.6](https://z.ai/blog/glm-4.6).

### GLM-4.5

Модели серии [**GLM-4.5**](https://huggingface.co/papers/2508.06471) — это базовые модели, разработанные для интеллектуальных агентов; варианты MoE описаны здесь как Glm4Moe.

GLM-4.5 содержит **355** млрд параметров в общей сложности, из которых **32** млрд являются активными, тогда как GLM-4.5-Air использует более компактную архитектуру с **106** млрд параметров в общей сложности и **12** млрд активных параметров. Модели GLM-4.5 объединяют возможности рассуждений, программирования и интеллектуальных агентов, чтобы удовлетворять сложным требованиям приложений на базе интеллектуальных агентов.

Обе модели GLM-4.5 и GLM-4.5-Air являются гибридными моделями рассуждений, которые предлагают два режима: режим рассуждений для сложного логического анализа и использования инструментов, а также режим без рассуждений для мгновенных ответов.

Мы опубликовали исходные коды базовых моделей, гибридных моделей рассуждения и версий FP8 гибридных моделей рассуждения для GLM-4.5 и GLM-4.5-Air. Они распространяются по открытой лицензии MIT и могут использоваться в коммерческих целях и для вторичной разработки.

Как показано в нашей комплексной оценке по 12 отраслевым бенчмаркам, GLM-4.5 демонстрирует выдающиеся результаты, набрав **63,2** балла и заняв **3-е** место среди всех проприетарных и открытых моделей. Примечательно, что GLM-4.5-Air обеспечивает конкурентоспособные результаты на уровне **59,8**, сохраняя при этом высокую эффективность.

Для получения дополнительных результатов оценки, примеров использования и технических деталей посетите наш [технический отчёт](https://huggingface.co/papers/2508.06471) или [технический блог](https://z.ai/blog/glm-4.5).

Код модели, парсер инструментов и парсер рассуждений можно найти в реализации [transformers](https://github.com/huggingface/transformers/tree/main/src/transformers/models/glm4_moe), [vLLM](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/models/glm4_moe_mtp.py) и [SGLang](https://github.com/sgl-project/sglang/blob/main/python/sglang/srt/models/glm4_moe.py).

## Glm4MoeConfig[[transformers.Glm4MoeConfig]]

#### transformers.Glm4MoeConfig[[transformers.Glm4MoeConfig]]

```python
transformers.Glm4MoeConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 151552, hidden_size: int = 4096, intermediate_size: int = 10944, num_hidden_layers: int = 46, num_attention_heads: int = 96, num_key_value_heads: int = 8, hidden_act: str = 'silu', max_position_embeddings: int = 131072, initializer_range: float = 0.02, rms_norm_eps: float = 1e-05, use_cache: bool = True, tie_word_embeddings: bool = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, attention_bias: bool = False, attention_dropout: float | int = 0.0, moe_intermediate_size: int = 1408, num_experts_per_tok: int = 8, output_router_logits: bool = False, n_shared_experts: int = 1, n_routed_experts: int = 128, routed_scaling_factor: float = 1.0, n_group: int = 1, topk_group: int = 1, first_k_dense_replace: int = 1, norm_topk_prob: bool = True, use_qk_norm: bool = False, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = None, pad_token_id: int | None = None, num_mtp_layers: int = 1)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/glm4_moe/configuration_glm4_moe.py#L29)

**Параметры:**

vocab_size (`int`, *необязательный*, по умолчанию `151552`) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в `input_ids`.

hidden_size (`int`, *optional*, по умолчанию `4096`) : Размерность скрытых представлений.

intermediate_size (`int`, *optional*, по умолчанию `10944`) : Размерность представлений MLP.

num_hidden_layers (`int`, *необязательный*, по умолчанию `46`) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (`int`, *необязательный*, по умолчанию `96`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

num_key_value_heads (`int`, *optional*, по умолчанию `8`) : Это количество ключевых и value-голов, которое следует использовать для реализации Grouped Query Attention. Если `num_key_value_heads=num_attention_heads`, модель будет использовать Multi Head Attention (MHA), если `num_key_value_heads=1` — Multi Query Attention (MQA), в противном случае используется GQA. При конвертации multi-head checkpoint в GQA checkpoint каждая группа ключевых и value-голов должна быть построена путем усреднения (meanpooling) всех исходных голов в этой группе. Подробнее см. в [этой статье](https://huggingface.co/papers/2305.13245). Если значение не указано, по умолчанию используется `num_attention_heads`.

hidden_act (`str`, *необязательный*, по умолчанию `silu`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

max_position_embeddings (`int`, *необязательный*, по умолчанию `131072`) : Максимальная длина последовательности, с которой может использоваться эта модель.

initializer_range (`float`, *необязательный*, по умолчанию `0.02`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

rms_norm_eps (`float`, *необязательный*, по умолчанию `1e-05`) : Значение epsilon, используемое слоями нормализации rms.

use_cache (`bool`, *необязательный*, по умолчанию `True`) : Следует ли модели возвращать последние значения внимания key/values (не используется во всех моделях). Актуально только при `config.is_decoder=True` или если модель является генеративной моделью только с декодером.

tie_word_embeddings (`bool`, *необязательный*, по умолчанию `False`) : Связывать ли веса эмбеддингов согласно отображению `tied_weights_keys` модели.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *optional*) : Словарь, содержащий параметры конфигурации для вложений RoPE. Словарь должен содержать значение для `rope_theta` и, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длинными `max_position_embeddings`.

attention_bias (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли смещение (bias) в слоях проекции запроса, ключа, значения и вывода при само-внимании.

attention_dropout (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Коэффициент dropout для вероятностей внимания.

moe_intermediate_size (`int`, *необязательный*, по умолчанию `1408`) : Промежуточный размер MLP маршрутизированных экспертов.

num_experts_per_tok (`int`, *optional*, по умолчанию `8`) : Количество экспертов, к которым маршрутизируется каждый токен. Это значение top-k для маршрутизации по выбору токена.

output_router_logits (`bool`, *необязательный*, по умолчанию `False`) : Нужно ли модели возвращать логиты роутера. Включение этого параметра также позволит модели выводить вспомогательную потерю, включая потерю балансировки нагрузки и z-потерю роутера.

n_shared_experts (`int`, *необязательный*, по умолчанию `1`) : Количество общих экспертов.

n_routed_experts (`int`, *необязательный*, по умолчанию `128`) : Количество маршрутизируемых экспертов.

routed_scaling_factor (`float`, *необязательный*, по умолчанию `1.0`) : Коэффициент масштабирования или маршрутизированных экспертов.

n_group (`int`, *необязательный*, по умолчанию 1) : Количество групп для маршрутизируемых экспертов.

topk_group (`int`, *optional*, по умолчанию `1`) : Количество выбранных групп для каждого токена (для каждого токена, чтобы выбранные эксперты находились только в пределах `topk_group` групп).

first_k_dense_replace (`int`, *optional*, по умолчанию 1) : Количество плотных слоев в верхних слоях (embed->dense->dense->...->dense->moe->moe...->lm_head). \--k плотных слоев--/

norm_topk_prob (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли нормализовать веса маршрутизированных экспертов.

use_qk_norm (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли нормализацию query-key в механизме внимания.

bos_token_id (`int`, *optional*) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (`Union[int, list[int]]`, *необязательный*) : Идентификатор токена, используемый для обозначения конца потока в словаре.

pad_token_id (`int`, *необязательный*) : Идентификатор токена, используемый для выравнивания в словаре.

num_mtp_layers (`int`, *optional*, по умолчанию 1) : Количество модулей Multi-Token Prediction (MTP), которые можно добавить после базовой трансформерной модели. При значении `0` модель работает как стандартный декодер. При значении `>0` каждый дополнительный модуль может предсказывать один дополнительный будущий токен во время вывода (спекулятивное декодирование через `generate(..., use_mtp=True)`).

Это класс конфигурации для хранения настроек модели Glm4MoeModel. Он используется для создания модели Glm4 Moe в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [zai-org/GLM-4.5](https://huggingface.co/zai-org/GLM-4.5)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

Пример:

```python
>>> from transformers import Glm4MoeModel, Glm4MoeConfig

>>> # Initializing a Glm4Moe style configuration
>>> configuration = Glm4MoeConfig()

>>> # Initializing a model from the GLM-4-MOE-100B-A10B style configuration
>>> model = Glm4MoeModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## Glm4MoeModel[[transformers.Glm4MoeModel]]

#### transformers.Glm4MoeModel[[transformers.Glm4MoeModel]]

```python
transformers.Glm4MoeModel(config: Glm4MoeConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/glm4_moe/modeling_glm4_moe.py#L474)

**Параметры:**

config ([Glm4MoeConfig](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Glm4 Moe без дополнительных слоёв, выводящая необработанные скрытые состояния.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.Glm4MoeModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/glm4_moe/modeling_glm4_moe.py#L490)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `past_key_values`, возвращаемые моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного значения допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `past_key_values` не переданы, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель будет выводить тот же формат кэша, который был передан на вход. Если используются `past_key_values`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)` вместо всех `input_ids` с формой `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

**Возвращает:** `MoeModelOutputWithPast` или `tuple(torch.Tensor)`

`MoeModelOutputWithPast` или кортеж `torch.Tensor` (если передано `return_dict=False` или когда `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([Glm4MoeConfig](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeConfig)) и входных данных.

Метод forward модели [Glm4MoeModel](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeModel) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя модели.
- **past_key_values** (`Cache`, *необязательный*, возвращается при передаче `use_cache=True` или когда `config.use_cache=True`) -- это экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если `config.is_encoder_decoder=True`, в блоках кросс-внимания), которые можно использовать (см. входной параметр `past_key_values`) для ускорения последовательного декодирования.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
- **router_logits** (`tuple(torch.Tensor)`, *необязательный*, возвращается, если переданы `output_router_probs=True` и `config.add_router_probs=True` или если `config.output_router_probs=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, sequence_length, num_experts)`.

  Сырые логиты маршрутизатора (после softmax), вычисляемые маршрутизаторами MoE; эти значения используются для вычисления вспомогательной функции потерь в моделях Mixture of Experts.

## Glm4MoeForCausalLM[[transformers.Glm4MoeForCausalLM]]

#### transformers.Glm4MoeForCausalLM[[transformers.Glm4MoeForCausalLM]]

```python
transformers.Glm4MoeForCausalLM(config: Glm4MoeConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/glm4_moe/modeling_glm4_moe.py#L550)

**Параметры:**

config ([Glm4MoeConfig](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Glm4 Moe для моделирования языка с причинно-следственной связью.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.Glm4MoeForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/glm4_moe/modeling_glm4_moe.py#L565)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `past_key_values`, возвращаемые моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного значения допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `past_key_values` не переданы, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель будет выводить тот же формат кэша, который был передан на вход. Если используются `past_key_values`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)` вместо всех `input_ids` с формой `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне `[0, ..., config.vocab_size]` или равняться -100 (см. docstring `input_ids`). Токены с индексами, установленными в `-100`, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне `[0, ..., config.vocab_size]`.

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

logits_to_keep (`Union[int, torch.Tensor]`, *необязательный*, по умолчанию `0`) : Если передано значение типа `int`, вычисляются logits для последних `logits_to_keep` токенов. Если передано `0`, logits вычисляются для всех `input_ids` (специальный случай). Для генерации нужны logits только последнего токена, и вычисление их только для этого токена позволяет сэкономить память, что становится весьма значимым для длинных последовательностей или большого размера словаря. Если передано значение типа `torch.Tensor`, оно должно быть одномерным и соответствовать индексам, которые нужно сохранить в измерении длины последовательности. Это полезно при использовании упакованного формата тензоров (одно измерение для batch и длины последовательности).

**Возвращает:** `MoeCausalLMOutputWithPast` или `tuple(torch.Tensor)`

Объект `MoeCausalLMOutputWithPast` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([Glm4MoeConfig](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeConfig)) и входных данных.

Метод forward класса [Glm4MoeForCausalLM](/docs/transformers/main/ru/model_doc/glm4_moe#transformers.Glm4MoeForCausalLM) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потеря языковой модели (для предсказания следующего токена).
- **logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.vocab_size)`) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).
- **aux_loss** (`torch.Tensor`, *необязательный*, возвращается при передаче `output_router_logits=True` или при `config.output_router_logits=True`, если модель обучает свой роутер с потерей балансировки нагрузки) -- Вспомогательная потеря балансировки нагрузки для разреженных модулей. Модели, которые балансируют своих экспертов с помощью смещения роутера (DeepSeek-V3 и архитектуры, производные от него), возвращают здесь `None`, при этом по-прежнему возвращая `router_logits`.
- **router_logits** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_router_logits=True` или когда `config.output_router_logits=True`) -- Кортеж `torch.Tensor` (по одному для каждого разреженного слоя) формы `(batch_size * sequence_length, num_experts)`.

  Сырые логиты маршрутизатора, вычисленные маршрутизаторами MoE. Их можно использовать для вычисления функции потерь балансировки нагрузки или для анализа того, как токены распределяются по экспертам.
- **past_key_values** (`Cache`, *необязательный*, возвращается при передаче `use_cache=True` или когда `config.use_cache=True`) -- это экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход `past_key_values`) для ускорения последовательного декодирования.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Пример:

```python
>>> from transformers import AutoTokenizer, Glm4MoeForCausalLM

>>> model = Glm4MoeForCausalLM.from_pretrained("meta-glm4_moe/Glm4Moe-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-glm4_moe/Glm4Moe-2-7b-hf")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
```

