{"record":{"id":"b14db1fb8b65c933","repo":"LykosAI/StabilityMatrix","slug":"prompt-must-be-processed-before-calling","errorCode":null,"errorMessage":"Prompt must be processed before calling GetExtraNetworksAsLocalModels","messagePattern":"Prompt must be processed before calling GetExtraNetworksAsLocalModels","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"StabilityMatrix.Avalonia/Models/Inference/Prompt.cs","lineNumber":75,"sourceCode":"    /// </summary>\n    /// <exception cref=\"PromptValidationError\">Thrown if a filename does not exist</exception>\n    public void ValidateExtraNetworks(IModelIndexService indexService)\n    {\n        GetExtraNetworks(indexService, false);\n    }\n\n    /// <summary>\n    /// Get ExtraNetworks as local model files and weights.\n    /// </summary>\n    public IEnumerable<(\n        LocalModelFile ModelFile,\n        double? ModelWeight,\n        double? ClipWeight\n    )> GetExtraNetworksAsLocalModels(IModelIndexService indexService)\n    {\n        if (ExtraNetworks is null)\n        {\n            throw new InvalidOperationException(\n                \"Prompt must be processed before calling GetExtraNetworksAsLocalModels\"\n            );\n        }\n\n        foreach (var network in ExtraNetworks)\n        {\n            var sharedFolderType = network.Type.ConvertTo<SharedFolderType>();\n\n            if (!indexService.ModelIndex.TryGetValue(sharedFolderType, out var modelList))\n            {\n                throw new ApplicationException($\"Model {network.Name} does not exist in index\");\n            }\n\n            var localModel = modelList.FirstOrDefault(m => m.FileNameWithoutExtension == network.Name);\n            if (localModel == null)\n            {\n                throw new ApplicationException($\"Model {network.Name} does not exist in index\");\n            }","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/LykosAI/StabilityMatrix/blob/af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002/StabilityMatrix.Avalonia/Models/Inference/Prompt.cs#L57-L93","documentation":"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.","triggerScenarios":"Calling GetExtraNetworksAsLocalModels(indexService) on a Prompt instance before calling Process() (or before processing completed), leaving ExtraNetworks null.","commonSituations":"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.","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."],"exampleFix":"// before\nvar models = prompt.GetExtraNetworksAsLocalModels(indexService);\n// after\nprompt.Process(tokenizersPath);\nif (prompt.ExtraNetworks is null)\n    throw new InvalidOperationException(\"Prompt processing failed\");\nvar models = prompt.GetExtraNetworksAsLocalModels(indexService);","handlingStrategy":"validation","validationCode":"if (prompt.ExtraNetworks is null)\n    throw new InvalidOperationException(\"Call Prompt.Process() before resolving extra networks\");","typeGuard":"bool CanResolveNetworks(Prompt p) => p.ExtraNetworks is not null;","tryCatchPattern":"try { models = prompt.GetExtraNetworksAsLocalModels(indexService); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"processed\"))\n{ prompt.Process(tokenizersPath); models = prompt.GetExtraNetworksAsLocalModels(indexService); }","preventionTips":["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."],"tags":["invalid-state","prompt","lifecycle"],"backgroundTag":"invalid-state-transition","analyzedSha":"af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002","analyzedAt":"2026-09-12T19:02:43.389Z","contentChangedAt":"2026-09-12T19:02:43.389Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}