0ddab99468
- configureSparks.ts: generic placeholders (e.g. 192.168.1.10), no Alice-specific IPs; descriptions explain the role of each node instead of naming his hardware - showPublicKey.ts: reads sparkConfig.yaml; emits a ready-to-paste one-liner (KEY='...' followed by 'ssh user@host "echo $KEY >> authorized_keys"' for each configured Spark). Falls back to generic instructions if Configure Sparks hasn't been run yet. - /api/status now includes vllm.base_url for the OpenAI endpoint - New endpoint panel in UI: base URL + model ID rows with copy buttons + collapsible curl example - Bump version to 0.1.0:1
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
from __future__ import annotations
|
|
import httpx
|
|
from .config import Settings
|
|
|
|
|
|
_TIMEOUT = 3.0
|
|
|
|
|
|
async def check_vllm(settings: Settings) -> dict:
|
|
base_url = (
|
|
f"http://{settings.spark1_host}:{settings.vllm_port}/v1"
|
|
if settings.spark1_host
|
|
else None
|
|
)
|
|
if not settings.spark1_host:
|
|
return {"ok": False, "error": "spark1 not configured", "base_url": base_url}
|
|
try:
|
|
async with httpx.AsyncClient(timeout=_TIMEOUT) as c:
|
|
r = await c.get(f"http://{settings.spark1_host}:{settings.vllm_port}/v1/models")
|
|
r.raise_for_status()
|
|
ids = [m["id"] for m in r.json().get("data", [])]
|
|
return {
|
|
"ok": True,
|
|
"current_model": ids[0] if ids else None,
|
|
"all": ids,
|
|
"base_url": base_url,
|
|
}
|
|
except Exception as e:
|
|
return {"ok": False, "error": str(e), "base_url": base_url}
|
|
|
|
|
|
async def check_parakeet(settings: Settings) -> dict:
|
|
if not settings.spark2_host:
|
|
return {"ok": False, "error": "spark2 not configured"}
|
|
try:
|
|
async with httpx.AsyncClient(timeout=_TIMEOUT) as c:
|
|
r = await c.get(f"http://{settings.spark2_host}:{settings.parakeet_port}/health")
|
|
r.raise_for_status()
|
|
return {"ok": True, "detail": r.json()}
|
|
except Exception as e:
|
|
return {"ok": False, "error": str(e)}
|
|
|
|
|
|
async def check_magpie(settings: Settings) -> dict:
|
|
if not settings.spark2_host:
|
|
return {"ok": False, "error": "spark2 not configured"}
|
|
try:
|
|
async with httpx.AsyncClient(timeout=_TIMEOUT) as c:
|
|
r = await c.get(f"http://{settings.spark2_host}:{settings.magpie_port}/v1/health/ready")
|
|
r.raise_for_status()
|
|
return {"ok": True, "detail": r.json() if r.headers.get("content-type", "").startswith("application/json") else r.text}
|
|
except Exception as e:
|
|
return {"ok": False, "error": str(e)}
|