""" gRPC message definitions for MPR worker communication. This is the source of truth for gRPC messages. The generator creates: - grpc/protos/worker.proto (protobuf definition) - grpc/worker_pb2.py (generated Python classes) - grpc/worker_pb2_grpc.py (generated gRPC stubs) """ from dataclasses import dataclass from typing import Optional # ----------------------------------------------------------------------------- # Request Messages # ----------------------------------------------------------------------------- @dataclass class JobRequest: """Request to submit a transcode/trim job.""" job_id: str source_path: str output_path: str preset_json: str # Serialized TranscodePreset trim_start: Optional[float] = None trim_end: Optional[float] = None @dataclass class ProgressRequest: """Request to stream progress updates for a job.""" job_id: str @dataclass class CancelRequest: """Request to cancel a running job.""" job_id: str @dataclass class Empty: """Empty message for requests with no parameters.""" pass # ----------------------------------------------------------------------------- # Response Messages # ----------------------------------------------------------------------------- @dataclass class JobResponse: """Response after submitting a job.""" job_id: str accepted: bool message: str @dataclass class ProgressUpdate: """Streaming progress update from worker.""" job_id: str progress: int # 0-100 current_frame: int current_time: float speed: float # e.g., 2.5x status: str # pending, processing, completed, failed, cancelled error: Optional[str] = None @dataclass class CancelResponse: """Response after cancel request.""" job_id: str cancelled: bool message: str @dataclass class WorkerStatus: """Worker health and capabilities.""" available: bool active_jobs: int supported_codecs: list[str] gpu_available: bool # ----------------------------------------------------------------------------- # Service Definition (for documentation, generator uses this) # ----------------------------------------------------------------------------- GRPC_SERVICE = { "name": "WorkerService", "package": "mpr.worker", "methods": [ { "name": "SubmitJob", "request": JobRequest, "response": JobResponse, "stream_response": False, }, { "name": "StreamProgress", "request": ProgressRequest, "response": ProgressUpdate, "stream_response": True, # Server streaming }, { "name": "CancelJob", "request": CancelRequest, "response": CancelResponse, "stream_response": False, }, { "name": "GetWorkerStatus", "request": Empty, "response": WorkerStatus, "stream_response": False, }, ], }