routing tests, launch.configs, redirect, stats and route statistics
This commit is contained in:
@@ -2699,12 +2699,18 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
|
||||
|
||||
def do_GET(self):
|
||||
parsed = urllib.parse.urlparse(self.path)
|
||||
if parsed.path == "/v1/route":
|
||||
if parsed.path == "/":
|
||||
self.send_response(302)
|
||||
self.send_header("Location", "/dashboard")
|
||||
self.end_headers()
|
||||
elif parsed.path == "/v1/route":
|
||||
self._handle_route(parsed)
|
||||
elif parsed.path == "/v1/routes":
|
||||
self._handle_routes(parsed)
|
||||
elif parsed.path == "/v1/routing":
|
||||
self._handle_routing(parsed)
|
||||
elif parsed.path == "/v1/model-speed":
|
||||
self._handle_model_speed(parsed)
|
||||
elif parsed.path == "/v1/nodes/assign":
|
||||
self._handle_assign(parsed)
|
||||
elif parsed.path == "/v1/network/assign":
|
||||
@@ -5725,6 +5731,44 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
|
||||
"models": out,
|
||||
})
|
||||
|
||||
def _handle_model_speed(self, parsed: urllib.parse.ParseResult):
|
||||
"""Drill into observed model speed and the latency cost of each route."""
|
||||
server: _TrackerHTTPServer = self.server # type: ignore[assignment]
|
||||
model = (urllib.parse.parse_qs(parsed.query).get("model") or [None])[0]
|
||||
if not model:
|
||||
self._send_json(400, {"error": "missing 'model' query parameter"})
|
||||
return
|
||||
resolved_name, preset = _resolve_model_preset(server.model_presets, model)
|
||||
stats_key = resolved_name or model
|
||||
with server.lock:
|
||||
self._purge_expired_nodes()
|
||||
nodes_by_id = dict(server.registry)
|
||||
routes = server.route_stats.model_rows(stats_key)
|
||||
one_hop = [r["latency_ms"] for r in routes if r["hop_count"] == 1 and r["latency_ms"] is not None]
|
||||
baseline_ms = min(one_hop) if one_hop else None
|
||||
for route in routes:
|
||||
node_ids = [part.split("[", 1)[0] for part in route["signature"].split("|", 1)[1].split("->")]
|
||||
devices = []
|
||||
for node_id in node_ids:
|
||||
node = nodes_by_id.get(node_id)
|
||||
profile = node.hardware_profile if node is not None else {}
|
||||
devices.append("gpu" if node is not None and (node.vram_bytes > 0 or profile.get("device") == "cuda") else "cpu")
|
||||
route["node_ids"] = node_ids
|
||||
route["device_mix"] = "-".join(dict.fromkeys(devices))
|
||||
route["latency_penalty_ms"] = round(route["latency_ms"] - baseline_ms, 3) if baseline_ms is not None else None
|
||||
node_rows = []
|
||||
for node in nodes_by_id.values():
|
||||
if not _node_matches_model(node, model) and not (preset and _node_matches_preset(node, resolved_name or model, preset)):
|
||||
continue
|
||||
sample = server.stats.get_node_model_stats(node.node_id, stats_key) if server.stats else {}
|
||||
node_rows.append({
|
||||
"node_id": node.node_id,
|
||||
"device": "gpu" if node.vram_bytes > 0 or node.hardware_profile.get("device") == "cuda" else "cpu",
|
||||
"benchmark_tokens_per_sec": node.benchmark_tokens_per_sec,
|
||||
**sample,
|
||||
})
|
||||
self._send_json(200, {"model": stats_key, "baseline_one_hop_latency_ms": baseline_ms, "routes": routes, "nodes": node_rows})
|
||||
|
||||
def _handle_routes(self, parsed: urllib.parse.ParseResult):
|
||||
server: _TrackerHTTPServer = self.server # type: ignore[assignment]
|
||||
params = urllib.parse.parse_qs(parsed.query)
|
||||
@@ -5967,7 +6011,7 @@ class TrackerServer:
|
||||
os.environ.get("MESHNET_ROUTE_MIN_SAMPLE_TOKENS", RoutingConfig.min_sample_tokens)
|
||||
),
|
||||
)
|
||||
self._route_stats = RouteStatsStore(routing_config)
|
||||
self._route_stats = RouteStatsStore(routing_config, db_path=stats_db)
|
||||
self.port: int | None = None
|
||||
|
||||
def _start_embedded_relay(self) -> dict:
|
||||
@@ -6322,6 +6366,7 @@ class TrackerServer:
|
||||
while not self._stats_stop.wait(_StatsCollector.SAVE_INTERVAL):
|
||||
if self._stats is not None:
|
||||
self._stats.save_to_db()
|
||||
self._route_stats.save_to_db()
|
||||
if self._billing is not None:
|
||||
self._billing.save_to_db()
|
||||
if self._accounts is not None:
|
||||
@@ -6382,6 +6427,7 @@ class TrackerServer:
|
||||
self._hf_pricing_stop.set()
|
||||
if self._stats is not None:
|
||||
self._stats.save_to_db()
|
||||
self._route_stats.save_to_db()
|
||||
if self._billing is not None:
|
||||
self._billing.save_to_db()
|
||||
if self._accounts is not None:
|
||||
|
||||
Reference in New Issue
Block a user