"""Solar Eval CLI entry point.""" from pathlib import Path import click from solar_eval._version import __version__ from solar_eval.cli.config import CLIConfig @click.group("solar-eval") @click.version_option(version=__version__) @click.option( "--config", "config_file", type=click.Path(exists=True, dir_okay=False), default=None, envvar="SOLAR_EVAL_CONFIG", help="Path to YAML config file", ) @click.option("--remote", envvar="SOLAR_EVAL_URL", default=None, help="Remote eval-engine URL") @click.option("--projects-dir", type=click.Path(), default=None, help="YAML projects directory") @click.option( "--verbose", "-V", is_flag=True, default=False, help="Verbose output (show pipeline step details)", ) @click.pass_context def solar_eval_cli( ctx: click.Context, config_file: str | None, remote: str | None, projects_dir: str | None, verbose: bool, ) -> None: """Solar Eval CLI — run evaluations locally or manage a remote eval engine.""" import logging ctx.ensure_object(dict) cfg = CLIConfig(config_path=Path(config_file) if config_file else None) if remote: cfg.remote_url = remote if projects_dir: cfg.override_projects_dir(Path(projects_dir)) ctx.obj["config"] = cfg # Set log level for pipeline details level = logging.DEBUG if verbose else logging.WARNING for name in ("solar_eval.pipelines.pipeline", "solar_eval.pipelines.steps.llm"): logging.getLogger(name).setLevel(level) # Register command groups from solar_eval.cli.commands.projects import projects_group from solar_eval.cli.commands.prompts import prompts_group from solar_eval.cli.commands.runs import runs_group from solar_eval.cli.commands.eval import eval_group from solar_eval.cli.commands.dashboard import dashboard_group from solar_eval.cli.commands.datasets import datasets_group from solar_eval.cli.commands.compare import compare_command from solar_eval.cli.commands.quickrun import quick_run from solar_eval.cli.commands.sync import sync_to_mongodb solar_eval_cli.add_command(projects_group) solar_eval_cli.add_command(prompts_group) solar_eval_cli.add_command(runs_group) solar_eval_cli.add_command(eval_group) solar_eval_cli.add_command(dashboard_group) solar_eval_cli.add_command(datasets_group) solar_eval_cli.add_command(compare_command) solar_eval_cli.add_command(quick_run) solar_eval_cli.add_command(sync_to_mongodb) def entrypoint() -> None: """CLI entry point registered in pyproject.toml.""" try: solar_eval_cli() except Exception as e: click.secho(f"ERROR: {e}", bold=True, fg="red") raise SystemExit(1)