52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
|
|
from model_chat_server import health_status
|
|
|
|
|
|
def print_table(services: list[dict]) -> None:
|
|
rows = []
|
|
for item in services:
|
|
service = item.get("service") or {}
|
|
storage = item.get("storage") or {}
|
|
rows.append(
|
|
[
|
|
str(item.get("id") or ""),
|
|
str(item.get("status") or ""),
|
|
str(item.get("runtime") or ""),
|
|
str(storage.get("status") or ""),
|
|
str(service.get("base_url") or ""),
|
|
str(service.get("compose") or "-"),
|
|
]
|
|
)
|
|
|
|
headers = ["model", "service", "runtime", "storage", "endpoint", "compose"]
|
|
widths = [
|
|
max(len(headers[index]), *(len(row[index]) for row in rows)) if rows else len(headers[index])
|
|
for index in range(len(headers))
|
|
]
|
|
print(" ".join(headers[index].ljust(widths[index]) for index in range(len(headers))))
|
|
print(" ".join("-" * width for width in widths))
|
|
for row in rows:
|
|
print(" ".join(row[index].ljust(widths[index]) for index in range(len(row))))
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Show local model service readiness.")
|
|
parser.add_argument("--json", action="store_true", help="Print full health payload as JSON.")
|
|
args = parser.parse_args()
|
|
|
|
status = health_status()
|
|
if args.json:
|
|
print(json.dumps(status, ensure_ascii=False, indent=2))
|
|
else:
|
|
print(f"Status: {status['status']} | host: {status['host']} | models: {status['registry_models']}")
|
|
print_table(status["model_services"])
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|