def METHOD_NAME(
    cls,
    reader: BaseReader,
    index_cls: Optional[Type[BaseIndex]] = None,
    index_kwargs: Optional[Dict] = None,
    use_query_str_in_loader: bool = False,
    query_str_kwargs_key: str = "query_str",
    name: Optional[str] = None,
    description: Optional[str] = None,
    fn_schema: Optional[Type[BaseModel]] = None,
) -> "OnDemandLoaderTool":
    """From defaults."""
    # NOTE: fn_schema should be specified if you want to use as langchain Tool
    index_cls = index_cls or VectorStoreIndex
    index_kwargs = index_kwargs or {}
    if description is None:
        description = f"Tool to load data from {reader.__class__.__name__}"
    if fn_schema is None:
        fn_schema = create_schema_from_function(
            name or "LoadData",
            reader.load_data,
            [(query_str_kwargs_key, str, None)],
        )
    metadata = ToolMetadata(name=name, description=description, fn_schema=fn_schema)
    return cls(
        loader=reader.load_data,
        index_cls=index_cls,
        index_kwargs=index_kwargs,
        use_query_str_in_loader=use_query_str_in_loader,
        query_str_kwargs_key=query_str_kwargs_key,
        metadata=metadata,
    )