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
- Call prompt.Process() (e.g. with a tokenizers path) before calling GetExtraNetworksAsLocalModels.
- Check that processing succeeded and ExtraNetworks is not null before resolving models.
- 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
- Treat Process() as a mandatory pipeline step; wrap prompt handling in a helper that always processes first.
- Assert ExtraNetworks is not null in tests that exercise extra-network resolution.
- Avoid exposing raw Prompt instances to code that resolves networks.
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
- Cannot create a marker when not attached to a document
- Comfy client is not connected
- ImageSource is not a local file or bitmap
- State is null
- Client is not connected
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)