FoundationAgents/MetaGPT · error · ValueError
Must provide either `input_dir` or `input_files`.
Error message
Must provide either `input_dir` or `input_files`.
What it means
SimpleEngine.from_input is the factory that ingests documents, and it requires exactly one input source: a directory (input_dir) or an explicit file list (input_files). If both are falsy it raises ValueError immediately, before any document reading, since SimpleDirectoryReader would have nothing to load.
Source
Thrown at metagpt/rag/engines/simple.py:117
ranker_configs: list[BaseRankerConfig] = None,
fs: Optional[fsspec.AbstractFileSystem] = None,
) -> "SimpleEngine":
"""From docs.
Must provide either `input_dir` or `input_files`.
Args:
input_dir: Path to the directory.
input_files: List of file paths to read (Optional; overrides input_dir, exclude).
transformations: Parse documents to nodes. Default [SentenceSplitter].
embed_model: Parse nodes to embedding. Must supported by llama index. Default OpenAIEmbedding.
llm: Must supported by llama index. Default OpenAI.
retriever_configs: Configuration for retrievers. If more than one config, will use SimpleHybridRetriever.
ranker_configs: Configuration for rankers.
fs: File system to use.
"""
if not input_dir and not input_files:
raise ValueError("Must provide either `input_dir` or `input_files`.")
file_extractor = cls._get_file_extractor()
documents = SimpleDirectoryReader(
input_dir=input_dir, input_files=input_files, file_extractor=file_extractor, fs=fs
).load_data()
cls._fix_document_metadata(documents)
transformations = transformations or cls._default_transformations()
nodes = run_transformations(documents, transformations=transformations)
return cls._from_nodes(
nodes=nodes,
transformations=transformations,
embed_model=embed_model,
llm=llm,
retriever_configs=retriever_configs,
ranker_configs=ranker_configs,
)View on GitHub (pinned to 11cdf466d0)
Solutions
- Pass a directory: SimpleEngine.from_input(input_dir='./data').
- Or pass files: SimpleEngine.from_input(input_files=['a.pdf', 'b.md']).
- If inputs are dynamic, check them before calling: if not input_dir and not input_files: raise/exit with a clear message.
- Verify glob results are non-empty when building input_files programmatically.
Example fix
# before
engine = SimpleEngine.from_input(input_files=glob.glob('*.pdf')) # empty list -> ValueError
# after
files = glob.glob('*.pdf') or None
engine = SimpleEngine.from_input(input_files=files) if files else SimpleEngine.from_input(input_dir='./docs') Defensive patterns
Strategy: validation
Validate before calling
def validate_rag_inputs(input_dir=None, input_files=None):
if not input_dir and not input_files:
raise ValueError("Nothing to ingest: pass input_dir or input_files")
if input_files:
missing = [f for f in input_files if not Path(f).exists()]
assert not missing, f"missing files: {missing}"
validate_rag_inputs(input_dir, input_files) Try / catch
try:
engine = SimpleEngine.from_input(input_dir=input_dir, input_files=input_files)
except ValueError as e:
if "input_dir" in str(e):
raise SystemExit("Usage: script --data-dir DIR | --files F1 F2") from e
raise Prevention
- Check path args at CLI parse time with argparse required groups
- Verify globs return non-empty before passing to input_files
- Default input_dir to a known docs folder in examples
When it happens
Trigger: Calling SimpleEngine.from_input() with no arguments, from_input(input_dir=None, input_files=[]), or passing paths that resolve to empty strings/None from a variable that was supposed to be populated.
Common situations: CLI scripts where the path argument was not provided, glob expressions that returned an empty list assigned to input_files, or dynamic pipelines where the input stage silently produced nothing.
Related errors
- In BM25RetrieverConfig, Objs must not be empty.
- Missing query bundle in extra info.
- Unsupported file types: {[str(i) for i in excludes]}
- "{str(file_or_path)}" not exists
- Only support for python, markdown, but got {language}
AI-assisted analysis of FoundationAgents/MetaGPT@11cdf466d0 (2026-08-14).
Data as JSON: /api/errors/a010dd163047ac0b.
Report an issue: GitHub.