{"record":{"id":"49f561c6eae002ca","repo":"LykosAI/StabilityMatrix","slug":"expected-network-type","errorCode":null,"errorMessage":"Expected network type.","messagePattern":"Expected network type\\.","errorType":"validation","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"StabilityMatrix.Core/Models/PromptSyntax/PromptSyntaxBuilder.cs","lineNumber":246,"sourceCode":"            }\n        }\n\n        return node;\n    }\n\n    private NetworkNode ParseNetwork()\n    {\n        var beginNetworkToken = ConsumeToken();\n        if (\n            beginNetworkToken is null\n            || !beginNetworkToken.Scopes.Contains(\"punctuation.definition.network.begin.prompt\")\n        )\n            throw new InvalidOperationException(\"Expected opening bracket.\");\n\n        // type\n        var typeToken = PeekToken();\n        if (typeToken is null || !typeToken.Scopes.Contains(\"meta.embedded.network.type.prompt\"))\n            throw new InvalidOperationException(\"Expected network type.\");\n        var type = ParseIdentifier();\n\n        // colon\n        var colonToken = ConsumeToken();\n        if (colonToken is null || !colonToken.Scopes.Contains(\"punctuation.separator.variable.prompt\"))\n            throw new InvalidOperationException(\"Expected colon.\");\n\n        // name\n        var nameToken = PeekToken();\n        if (nameToken is null || !nameToken.Scopes.Contains(\"meta.embedded.network.model.prompt\"))\n            throw new InvalidOperationException(\"Expected network name.\");\n        var name = ParseText();\n\n        // model weight, clip weight\n        NumberNode? modelWeight = null;\n        NumberNode? clipWeight = null;\n\n        // colon","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/LykosAI/StabilityMatrix/blob/af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002/StabilityMatrix.Core/Models/PromptSyntax/PromptSyntaxBuilder.cs#L228-L264","documentation":"Thrown by ParseNetwork after the opening '<' when the next token is missing or not scoped as 'meta.embedded.network.type.prompt'. The parser expects a network type identifier (lora, lycoris, etc.) immediately after the opening bracket. The message literally reads 'Expected network type.'","triggerScenarios":"Input like '<:1.0>' or '<' immediately followed by ':' or end of input — no type token between '<' and ':'.","commonSituations":"Prompts where the type word was deleted during editing; templates with placeholder '<:name:1>' left unfilled; copy/paste truncation cutting '<lora' down to '<'.","solutions":["Insert a valid network type after '<', e.g. '<lora:name:0.8>'","Use a type the grammar scopes as meta.embedded.network.type.prompt (typically lowercase lora/lycoris)","Check that no character (space-free) separates '<' from the type in a way the tokenizer rejects","Catch InvalidOperationException to report malformed network tags"],"exampleFix":"// before\nvar prompt = \"<:myModel:0.8>\";\n// after\nvar prompt = \"<lora:myModel:0.8>\";","handlingStrategy":"validation","validationCode":"bool HasNetworkType(string tag) { var m = System.Text.RegularExpressions.Regex.Match(tag, \"^<([a-zA-Z]+):\"); return m.Success && !string.IsNullOrEmpty(m.Groups[1].Value); }","typeGuard":"null","tryCatchPattern":"try { var node = builder.Parse(prompt); } catch (InvalidOperationException ex) when (ex.Message.Contains(\"network type\")) { // report '<' followed by missing type }","preventionTips":["Always include the type keyword (lora/lycoris) right after '<'","Fill in template placeholders before parsing","Validate each '<...>' tag against '<type:name[:w1][:w2]>' shape","Reject tags with empty type segments during ingestion"],"tags":["parser","prompt-syntax","lora","network-type"],"backgroundTag":"missing-required-argument","analyzedSha":"af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002","analyzedAt":"2026-09-12T19:02:43.389Z","contentChangedAt":"2026-09-12T19:02:43.389Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}