summaryrefslogtreecommitdiff
path: root/src/mcp_sd15/cli.py
blob: 3a3a9f717dc4fbb9e84d375d4e677ea06e76d75b (plain)
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
"""Command-line entry point."""

from __future__ import annotations

import argparse
import logging
from collections.abc import Sequence
from pathlib import Path

from . import __version__
from .config import load_config
from .errors import SD15Error
from .model_manager import ModelManager
from .server import create_server
from .service import ImageGenerationService


def parser() -> argparse.ArgumentParser:
    result = argparse.ArgumentParser(prog="mcp-sd15")
    result.add_argument("--config", type=Path, default=Path("config.toml"))
    result.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
    return result


def main(argv: Sequence[str] | None = None) -> int:
    args = parser().parse_args(argv)
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s %(levelname)s %(name)s: %(message)s",
    )
    try:
        config = load_config(args.config)
        logging.getLogger(__name__).info(
            "loading checkpoint=%s loras=%d",
            config.model.checkpoint_path(),
            len(config.model.loras),
        )
        backend = ModelManager(config)
        service = ImageGenerationService(config, backend)
        server = create_server(service)
        if config.server.transport == "streamable-http":
            server.run(
                transport="streamable-http",
                host=config.server.host,
                port=config.server.port,
            )
        else:
            server.run()
    except SD15Error as exc:
        logging.getLogger(__name__).error("startup failed: %s", exc)
        return 2
    return 0


if __name__ == "__main__":
    raise SystemExit(main())