Source code for xrag.cli
import argparse
import sys
from enum import Enum, unique
from .webui import run_web_ui
from .launcher import run
from .config import Config
from .data.qa_loader import generate_qa_from_folder
VERSION = "0.1.1"
USAGE = (
"-" * 70
+ "\n"
+ "| Usage: |\n"
+ "| xrag-cli run -h: launch an eval experiment |\n"
+ "| xrag-cli webui: launch XRAGBoard |\n"
+ "| xrag-cli version: show version info |\n"
+ "| xrag-cli generate -i <input_file> -o <output_file> -n <num_questions> -s <sentence_length>: generate QA pairs from a folder |\n"
+ "-" * 70
)
WELCOME = (
"-" * 58
+ "\n"
+ "| Welcome to XRAG, version {}".format(VERSION)
+ " " * (21 - len(VERSION))
+ "|\n|"
+ " " * 56
+ "|\n"
+ "| Project page: https://github.com/DocAILab/xrag |\n"
+ "-" * 58
)
[docs]
@unique
class Command(str, Enum):
RUN = "run"
WEBUI = "webui"
VER = "version"
GENERATE = "generate"
HELP = "help"
[docs]
def main():
# Initialize the argument parser
parser = argparse.ArgumentParser(description='XRAG CLI Tool')
# Define the subcommands
subparsers = parser.add_subparsers(dest='command', help='Subcommands')
# 'run' command
run_parser = subparsers.add_parser('run', help='Run the application')
run_parser.add_argument('--override', nargs='*', help='Override config values (e.g., --override key1=value1 key2=value2)')
# Other commands
subparsers.add_parser('webui', help='Run the web UI')
subparsers.add_parser('version', help='Show version')
subparsers.add_parser('help', help='Show help')
generate_parser = subparsers.add_parser('generate', help='Generate QA pairs')
generate_parser.add_argument('-i', '--input', type=str, help='Input file path')
generate_parser.add_argument('-o', '--output', type=str, help='Output file path')
generate_parser.add_argument('-n', '--num', type=int, help='Number of questions per file', default=3)
generate_parser.add_argument('-s', '--sentence_length', type=int, help='Sentence length, -1 means no split', default=-1)
# Parse the arguments
args = parser.parse_args()
# Handle commands
if args.command == Command.RUN:
# Parse overrides
config_overrides = {}
if args.override:
for override in args.override:
if '=' in override:
key, value = override.split('=', 1)
config_overrides[key.strip()] = value.strip()
else:
print(f"Invalid override format: {override}")
sys.exit(1)
# Update the Config instance
config = Config()
config.update_config(config_overrides)
run()
elif args.command == Command.WEBUI:
run_web_ui()
elif args.command == Command.VER:
print(WELCOME)
elif args.command == Command.HELP or args.command is None:
parser.print_help()
elif args.command == Command.GENERATE:
generate_qa_from_folder(args.input, args.output, args.num, args.sentence_length)
else:
print(f"Unknown command: {args.command}")