dotnet/machinelearning · error · NotImplementedException

inputEmbeddings is not supported

Error message

inputEmbeddings is not supported

What it means

Phi2Model.forward does not support passing precomputed input embeddings; if inputEmbeddings is non-null it throws NotImplementedException('inputEmbeddings is not supported'). Embeddings are always computed internally from inputIds.

Solutions

  1. Pass inputIds and let the model compute embeddings itself
  2. Tokenize your inputs before calling forward instead of pre-embedding them
  3. Implement embedding-input support in Phi2Model (skip embed_tokens when embeddings supplied) if you own the code

Example fix

// before
model.forward(inputIds: null, inputEmbeddings: embeddings, ...);
// after
var ids = tokenizer.Encode(text); model.forward(inputIds: ids, inputEmbeddings: null, ...);
Defensive patterns

Strategy: validation

Validate before calling

if (embeddings is not null) throw new InvalidOperationException("Phi2Model does not accept input embeddings; pass inputIds instead");

Try / catch

try { output = model.forward(inputIds: ids, inputEmbeddings: null, options); }
catch (NotImplementedException ex) when (ex.Message.Contains("inputEmbeddings")) { throw new NotSupportedException("Tokenize inputs before calling Phi2Model.forward", ex); }

Prevention

When it happens

Trigger: Calling Phi2Model.forward with both/independent inputEmbeddings, e.g. continuing generation from hidden states, passing decoder inputs_embeds, or a generic pipeline that always supplies embeddings.

Common situations: Porting HuggingFace code that uses inputs_embeds; piping outputs of one model into Phi-2 without tokenizing; shared inference harness passing null inputIds with non-null embeddings.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11). Data as JSON: /api/errors/0dc855ef8288dd86. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.ML.GenAI.Phi/Module/Phi2Model.cs:66

    public Phi2Config Config => this._config;

#pragma warning disable MSML_GeneralName // This name should be PascalCased
    public override (Tensor, Tensor?, Tensor?) forward(
#pragma warning restore MSML_GeneralName // This name should be PascalCased
        Tensor inputIds,
        Tensor? attentionMask = null,
        int pastKeyValueLength = 0,
        Tensor? positionIds = null,
        Tensor? inputEmbeddings = null,
        (bool, bool, bool) options = default) // use_cache, output_attentions, output_hidden_states
    {
        (var outputAttentions, var outputHiddenStates, var useCache) = options;

        // TODO
        // add support for inputEmbeddings
        if (inputEmbeddings is not null)
        {
            throw new NotImplementedException("inputEmbeddings is not supported");
        }
        inputEmbeddings = this.embed_tokens.forward(inputIds);
        inputEmbeddings = this.embed_dropout.forward(inputEmbeddings);
        var batchSize = inputIds.shape[0];
        var seqLen = (int)inputIds.shape[1];

        if (positionIds is null)
        {
            positionIds = torch.arange(pastKeyValueLength, seqLen + pastKeyValueLength, dtype: inputIds.dtype, device: inputIds.device);
            positionIds = positionIds.unsqueeze(0);
        }

        // attention
        // use 4d attention mask
        if (attentionMask is not null)
        {
            attentionMask = this.Prepare4DCausalAttentionMask(attentionMask, seqLen, pastKeyValueLength, inputEmbeddings.dtype);
        }

View on GitHub (pinned to 7b76e69cf9)