{"record":{"id":"6f65ec63cea60ea6","repo":"stanfordnlp/CoreNLP","slug":"need-to-specify-model-to-load-an-already-prepared","errorCode":null,"errorMessage":"Need to specify -model to load an already prepared CombinedParser","messagePattern":"Need to specify -model to load an already prepared CombinedParser","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/parser/dvparser/CombineDVModels.java","lineNumber":91,"sourceCode":"        Reranker reranker = dvparser.reranker;\n        if (!(reranker instanceof DVModelReranker)) {\n          throw new IllegalArgumentException(\"Expected parsers with DVModel embedded\");\n        }\n        dvparsers.add(((DVModelReranker) reranker).getModel());\n        if (underlyingParser == null) {\n          underlyingParser = dvparser;\n          options = underlyingParser.getOp();\n          // TODO: other parser's options?\n          options.setOptions(newArgs);\n        }\n        log.info(\"... done\");\n      }\n      combinedParser = LexicalizedParser.copyLexicalizedParser(underlyingParser);\n      CombinedDVModelReranker reranker = new CombinedDVModelReranker(options, dvparsers);\n      combinedParser.reranker = reranker;\n      combinedParser.saveParserToSerialized(modelPath);\n    } else {\n      throw new IllegalArgumentException(\"Need to specify -model to load an already prepared CombinedParser\");\n    }\n\n    Treebank testTreebank = null;\n    if (testTreebankPath != null) {\n      log.info(\"Reading in trees from \" + testTreebankPath);\n      if (testTreebankFilter != null) {\n        log.info(\"Filtering on \" + testTreebankFilter);\n      }\n      testTreebank = combinedParser.getOp().tlpParams.memoryTreebank();;\n      testTreebank.loadPath(testTreebankPath, testTreebankFilter);\n      log.info(\"Read in \" + testTreebank.size() + \" trees for testing\");\n\n      EvaluateTreebank evaluator = new EvaluateTreebank(combinedParser.getOp(), null, combinedParser);\n      evaluator.testOnTreebank(testTreebank);\n    }\n  }\n}\n","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/parser/dvparser/CombineDVModels.java#L73-L109","documentation":"CombineDVModels supports two modes: combine base models and save a combined parser (-model output path), or load an already prepared combined parser (-loadModel). If neither combine mode ran (no -baseModels given) and no -loadModel path was supplied, it throws IllegalArgumentException because there is no -model to load the CombinedParser from.","triggerScenarios":"Running CombineDVModels without -baseModels and without -loadModel, so the code reaches the else branch expecting modelPath to name an existing CombinedParser to load; or supplying only -model for output in a context where no combination was performed.","commonSituations":"Misunderstanding the tool's dual mode: -model is an output when combining but a required input when loading; forgetting -loadModel when the intent was to evaluate an existing combined parser.","solutions":["When combining: pass both -baseModels <paths> and -model <output path>","When loading a prepared combined parser: pass -loadModel /path/to/combined.ser.gz (with -model naming it, per this branch's contract) instead of running in combine mode","Review the tool's usage to pick the correct mode before invoking"],"exampleFix":"// before\njava ... CombineDVModels -testTreebank wsj-test.txt\n// after\njava ... CombineDVModels -loadModel combined.ser.gz -testTreebank wsj-test.txt","handlingStrategy":"validation","validationCode":"boolean hasBaseModels = Arrays.asList(cmdArgs).contains(\"-baseModels\");\nboolean hasLoadModel = Arrays.asList(cmdArgs).contains(\"-loadModel\");\nif (!hasBaseModels && !hasLoadModel) {\n    throw new IllegalArgumentException(\"CombineDVModels needs -baseModels (combine mode) or -loadModel (load mode)\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    CombineDVModels.main(args);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"-model to load\")) {\n        System.err.println(\"Use -loadModel combined.ser.gz to evaluate an existing CombinedParser\");\n    }\n}","preventionTips":["Decide the mode up front: combine (-baseModels + -model) vs load (-loadModel)","Never run the tool with only evaluation flags","Document the two modes in your pipeline scripts"],"tags":["cli","argument-validation","stanford-corenlp"],"backgroundTag":"missing-required-argument","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}