File size: 2,674 Bytes
9c84f9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""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)