phonegpu-space / app /gbridge /protocol.py
josephrw's picture
Upload folder using huggingface_hub
d958e80 verified
Raw
History Blame Contribute Delete
2.09 kB
from typing import Dict, Any, Optional
from app.core.models import WorkerRuntimeType
def make_bridge_hello(node_id: str, node_type: str, capabilities: list) -> Dict[str, Any]:
return {"op": "bridge.hello", "node_id": node_id, "node_type": node_type, "capabilities": capabilities}
def make_capability_advertisement(node_id: str, capabilities: list) -> Dict[str, Any]:
return {"op": "capability.advertise", "node_id": node_id, "capabilities": capabilities}
def make_job_offer(job_id: str, job_type: str, payload: dict, privacy_mode: str) -> Dict[str, Any]:
return {"op": "job.offer", "job_id": job_id, "job_type": job_type, "payload": payload, "privacy_mode": privacy_mode}
def make_job_accept(job_id: str, worker_id: str) -> Dict[str, Any]:
return {"op": "job.accept", "job_id": job_id, "worker_id": worker_id}
def make_job_reject(job_id: str, worker_id: str, reason: str) -> Dict[str, Any]:
return {"op": "job.reject", "job_id": job_id, "worker_id": worker_id, "reason": reason}
def make_job_result(job_id: str, worker_id: str, output: dict, latency_ms: int, device_signature: Optional[str] = None) -> Dict[str, Any]:
return {"op": "job.result", "job_id": job_id, "worker_id": worker_id, "output": output, "latency_ms": latency_ms, "device_signature": device_signature}
def make_receipt_message(receipt: dict) -> Dict[str, Any]:
return {"op": "receipt.emit", "receipt": receipt}
def make_agent_packet(node_id: str, packet_type: str, payload: dict) -> Dict[str, Any]:
return {"op": "agent.packet", "node_id": node_id, "packet_type": packet_type, "payload": payload}
def validate_bridge_message(msg: dict) -> bool:
valid_ops = {
"bridge.hello", "capability.advertise", "lease.create", "job.offer",
"job.accept", "job.reject", "job.progress", "job.result",
"receipt.emit", "agent.packet", "error", "disconnect",
}
return isinstance(msg, dict) and msg.get("op") in valid_ops
def parse_bridge_message(msg: dict) -> tuple[str, Optional[str], dict]:
return msg.get("op", ""), msg.get("node_id"), msg