2025, Nov 10 12:04

Исправляем ImportError MISTRAL_INPUTS_DOCSTRING в NVIDIA/nv-embed-v2 (Transformers)

ImportError при загрузке NVIDIA/nv-embed-v2 в Transformers? Причина — MISTRAL_INPUTS_DOCSTRING. Проверьте среду и закрепите Transformers 4.42.4 для работы.

При загрузке NVIDIA/NV-Embed-v2 через Hugging Face Transformers некоторые пользователи сталкиваются с ImportError, связанным с внутренним кодом Mistral. Сбой проявляется сразу после инициализации модели с включённым trust_remote_code и обычно указывает на отсутствующий символ в реализации Mistral.

Минимальный пример, воспроизводящий проблему

Ниже приведён фрагмент, показывающий типичную настройку эмбеддинга, которая вызывает ошибку в несовместимых окружениях:

from transformers import AutoTokenizer, AutoModel

repo_id = "NVIDIA/nv-embed-v2"
enc_tok = AutoTokenizer.from_pretrained(repo_id)
enc_model = AutoModel.from_pretrained(repo_id, trust_remote_code=True)
enc_model.eval()

В окружениях, где проблема возникает, трассировка Python ссылается на отсутствующее имя в modeling_mistral.py.

ImportError: cannot import name 'MISTRAL_INPUTS_DOCSTRING' from 'transformers.models.mistral.modeling_mistral'

Что происходит на самом деле

Корневая причина — несовпадение версий пакета Transformers. Символ MISTRAL_INPUTS_DOCSTRING присутствует в Transformers вплоть до 4.51.3 и удалён начиная с 4.52.0, включая более новые релизы линейки 4.53.x. Если рантайм подхватывает более свежую сборку Transformers, а ваш код рассчитывает, что символ существует, импорт внутренних модулей Mistral завершается с ImportError. Такое нередко случается, когда активно другое виртуальное окружение, IDE использует интерпретатор, отличный от терминала, или интерпретатор не был перезапущен после обновления библиотеки.

Как проверить среду выполнения

Не полагайтесь на предположения — посмотрите, что именно запущено в текущем процессе Python. Проверьте версию Transformers в том же интерпретаторе, где выполняется код модели:

import transformers

print(transformers.__version__)

При необходимости также уточните версию Python и путь к интерпретатору, чтобы убедиться, что используется ожидаемое виртуальное окружение:

import sys

print(sys.version)
print(sys.executable)

Исправление: закрепите совместимую версию Transformers и перезапустите интерпретатор

Если обнаруженная версия несовместима, установите выпуск, где символ присутствует. Пользователи подтвердили, что работает 4.42.4, а карточка модели предлагает 4.42.2. После установки перезапустите IDE или сессию Python, чтобы рантайм действительно использовал новую версию.

pip install -U transformers==4.42.4

Когда окружение согласовано, исходный код менять не нужно. Для полноты — та же настройка с отдельными локальными именами:

from transformers import AutoTokenizer, AutoModel

repo_id = "NVIDIA/nv-embed-v2"
enc_tok = AutoTokenizer.from_pretrained(repo_id)
enc_model = AutoModel.from_pretrained(repo_id, trust_remote_code=True)
enc_model.eval()

Почему это важно

Модели эмбеддингов, использующие trust_remote_code, могут ссылаться на внутренние части конкретных версий библиотек. Если ваша среда тихо обновилась до сборки, в которой внутренний символ удалён, код, который раньше работал, внезапно перестаёт запускаться. Воспроизводимые ML‑конвейеры зависят от фиксации версий и проверки точного интерпретатора, используемого инструментами, особенно при переключении между терминалами, ноутбуками и IDE.

Итоги

Если при загрузке NVIDIA/NV-Embed-v2 возникает ImportError вокруг MISTRAL_INPUTS_DOCSTRING, проверьте версию Transformers в работающем процессе, убедитесь, что активны нужные venv и интерпретатор, и закрепите проверенный релиз, например 4.42.4, учитывая рекомендации карточки модели про 4.42.2. После переустановки перезапустите IDE, чтобы подтянулся корректный набор зависимостей. Эта несложная рутина экономит время и делает пайплайны эмбеддингов стабильными и предсказуемыми.

Статья основана на вопросе на StackOverflow от 6zL и ответе пользователя furas.