LykosAI/StabilityMatrix · error · InvalidOperationException

Prompt must be processed before calling…

Error message

Prompt must be processed before calling GetExtraNetworksAsLocalModels

What it means

GetExtraNetworksAsLocalModels() resolves the extra-network tokens (e.g. <lora:...>) that Process() extracted into the ExtraNetworks collection. If ExtraNetworks is null, the prompt was never processed, so there is nothing to resolve; the library throws InvalidOperationException to enforce the Process-before-resolve ordering.

Solutions

  1. Call prompt.Process() (e.g. with a tokenizers path) before calling GetExtraNetworksAsLocalModels.
  2. Check that processing succeeded and ExtraNetworks is not null before resolving models.
  3. Restructure pipeline code so prompt processing always precedes extra-network resolution.

Example fix

// before
var models = prompt.GetExtraNetworksAsLocalModels(indexService);
// after
prompt.Process(tokenizersPath);
if (prompt.ExtraNetworks is null)
    throw new InvalidOperationException("Prompt processing failed");
var models = prompt.GetExtraNetworksAsLocalModels(indexService);
Defensive patterns

Strategy: validation

Validate before calling

if (prompt.ExtraNetworks is null)
    throw new InvalidOperationException("Call Prompt.Process() before resolving extra networks");

Type guard

bool CanResolveNetworks(Prompt p) => p.ExtraNetworks is not null;

Try / catch

try { models = prompt.GetExtraNetworksAsLocalModels(indexService); }
catch (InvalidOperationException ex) when (ex.Message.Contains("processed"))
{ prompt.Process(tokenizersPath); models = prompt.GetExtraNetworksAsLocalModels(indexService); }

Prevention

When it happens

Trigger: Calling GetExtraNetworksAsLocalModels(indexService) on a Prompt instance before calling Process() (or before processing completed), leaving ExtraNetworks null.

Common situations: Querying extra networks immediately after parsing prompt text without running Process; building inference pipelines where prompts are constructed lazily; error paths where Process threw earlier and left state unset.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of LykosAI/StabilityMatrix@af93d6ef57 (2026-09-12). Data as JSON: /api/errors/b14db1fb8b65c933. Report an issue: GitHub.

Appendix: source

Thrown at StabilityMatrix.Avalonia/Models/Inference/Prompt.cs:75

    /// </summary>
    /// <exception cref="PromptValidationError">Thrown if a filename does not exist</exception>
    public void ValidateExtraNetworks(IModelIndexService indexService)
    {
        GetExtraNetworks(indexService, false);
    }

    /// <summary>
    /// Get ExtraNetworks as local model files and weights.
    /// </summary>
    public IEnumerable<(
        LocalModelFile ModelFile,
        double? ModelWeight,
        double? ClipWeight
    )> GetExtraNetworksAsLocalModels(IModelIndexService indexService)
    {
        if (ExtraNetworks is null)
        {
            throw new InvalidOperationException(
                "Prompt must be processed before calling GetExtraNetworksAsLocalModels"
            );
        }

        foreach (var network in ExtraNetworks)
        {
            var sharedFolderType = network.Type.ConvertTo<SharedFolderType>();

            if (!indexService.ModelIndex.TryGetValue(sharedFolderType, out var modelList))
            {
                throw new ApplicationException($"Model {network.Name} does not exist in index");
            }

            var localModel = modelList.FirstOrDefault(m => m.FileNameWithoutExtension == network.Name);
            if (localModel == null)
            {
                throw new ApplicationException($"Model {network.Name} does not exist in index");
            }

View on GitHub (pinned to af93d6ef57)