stanfordnlp/CoreNLP · error · java.lang.IllegalArgumentException

Found an argument -baseModels with no actual models named

Error message

Found an argument -baseModels with no actual models named

What it means

CombineDVModels.main throws IllegalArgumentException when the -baseModels flag is present but is followed by zero model paths (the next argument starts with '-' or the argument list ends). At least one base serialized DVParser is required to combine DV models. The guard fires immediately after the flag-parsing while-loop.

Solutions

  1. List one or more serialized parser paths after -baseModels, e.g. -baseModels parser1.ser.gz parser2.ser.gz
  2. Ensure no other '-flag' token immediately follows -baseModels
  3. Check shell variables for empty expansion before the tool runs

Example fix

// before
... -baseModels -model combined.ser.gz
// after
... -baseModels parser1.ser.gz parser2.ser.gz -model combined.ser.gz
Defensive patterns

Strategy: validation

Validate before calling

if (cmdArgs != null) {
    for (int i = 0; i < cmdArgs.length; i++) {
        if (cmdArgs[i].equals("-baseModels") &&
            (i + 1 >= cmdArgs.length || cmdArgs[i+1].startsWith("-"))) {
            throw new IllegalArgumentException("-baseModels needs at least one parser path");
        }
    }
}

Try / catch

try {
    CombineDVModels.main(args);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("-baseModels")) {
        System.err.println("List one or more serialized DVParser paths after -baseModels");
    }
}

Prevention

When it happens

Trigger: Passing '-baseModels' as the last argument, or as '-baseModels -model foo' where the next token starts with '-', terminating the path-collection loop with an empty list.

Common situations: Quoting mistakes in shell scripts that drop the arguments (e.g. unexpanded empty variable); putting another flag directly after -baseModels; forgetting that multiple model paths must follow as bare tokens until the next '-' argument.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of stanfordnlp/CoreNLP@1b7edd19c4 (2026-09-10). Data as JSON: /api/errors/88fe5284d46fb29b. Report an issue: GitHub.

Appendix: source

Thrown at src/edu/stanford/nlp/parser/dvparser/CombineDVModels.java:57

    List<String> unusedArgs = new ArrayList<>();

    for (int argIndex = 0; argIndex < args.length; ) {
      if (args[argIndex].equalsIgnoreCase("-model")) {
        modelPath = args[argIndex + 1];
        argIndex += 2;
      } else if (args[argIndex].equalsIgnoreCase("-testTreebank")) {
        Pair<String, FileFilter> treebankDescription = ArgUtils.getTreebankDescription(args, argIndex, "-testTreebank");
        argIndex = argIndex + ArgUtils.numSubArgs(args, argIndex) + 1;
        testTreebankPath = treebankDescription.first();
        testTreebankFilter = treebankDescription.second();
      } else if (args[argIndex].equalsIgnoreCase("-baseModels")) {
        argIndex++;
        baseModelPaths = new ArrayList<>();
        while (argIndex < args.length && args[argIndex].charAt(0) != '-') {
          baseModelPaths.add(args[argIndex++]);
        }
        if (baseModelPaths.size() == 0) {
          throw new IllegalArgumentException("Found an argument -baseModels with no actual models named");
        }
      } else {
        unusedArgs.add(args[argIndex++]);
      }
    }

    String[] newArgs = unusedArgs.toArray(new String[unusedArgs.size()]);
    LexicalizedParser underlyingParser = null;
    Options options = null;
    LexicalizedParser combinedParser = null;
    if (baseModelPaths != null) {
      List<DVModel> dvparsers = new ArrayList<>();
      for (String baseModelPath : baseModelPaths) {
        log.info("Loading serialized DVParser from " + baseModelPath);
        LexicalizedParser dvparser = LexicalizedParser.loadModel(baseModelPath);
        Reranker reranker = dvparser.reranker;
        if (!(reranker instanceof DVModelReranker)) {
          throw new IllegalArgumentException("Expected parsers with DVModel embedded");

View on GitHub (pinned to 1b7edd19c4)