feat: add probation and ban enforcement
This commit is contained in:
@@ -117,6 +117,14 @@ class _GatewayHandler(http.server.BaseHTTPRequestHandler):
|
||||
route_nodes = tracker_resp.get("nodes", [])
|
||||
if route_nodes and not _valid_route_nodes(route_nodes):
|
||||
raise ValueError("invalid tracker route metadata")
|
||||
banned_wallet = _banned_route_wallet(server.contracts, route_nodes)
|
||||
if banned_wallet is not None:
|
||||
self._send_openai_error(
|
||||
503,
|
||||
f"model not available: route includes banned wallet {banned_wallet}",
|
||||
"model_not_available",
|
||||
)
|
||||
return
|
||||
except urllib.error.HTTPError as exc:
|
||||
error_body = _safe_error_body(exc)
|
||||
self._send_openai_error(
|
||||
@@ -274,6 +282,18 @@ def _valid_route_nodes(route_nodes: object) -> bool:
|
||||
return True
|
||||
|
||||
|
||||
def _banned_route_wallet(contracts: Any | None, route_nodes: object) -> str | None:
|
||||
if contracts is None or not isinstance(route_nodes, list):
|
||||
return None
|
||||
for node in route_nodes:
|
||||
if not isinstance(node, dict):
|
||||
continue
|
||||
wallet_address = node.get("wallet_address")
|
||||
if isinstance(wallet_address, str) and contracts.registry.get_wallet(wallet_address).banned:
|
||||
return wallet_address
|
||||
return None
|
||||
|
||||
|
||||
def _api_key_from_authorization(header: str | None) -> str | None:
|
||||
if not header:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user