{"id":"0ba5e830-d9f7-400d-8cfc-cb47f9f2b6d7","task":"compose multiple ray serve deployments into one application using .bind()","domain":"docs.ray.io/en/latest/serve","steps":["Define each processing step (e.g. preprocessing, model inference, postprocessing) as its own @serve.deployment class so it can scale and configure independently","Call .bind() on each deployment and pass the resulting node into the constructor of a downstream deployment to wire them into a directed acyclic graph","At runtime, Ray Serve substitutes each bound reference with a DeploymentHandle so the receiving deployment calls the upstream deployment's methods","Bind the same deployment class multiple times with different constructor arguments if you need multiple differently-configured instances composed into the same graph","Deploy the top-level bound node as the application entrypoint and verify each sub-deployment scales/configures independently in the Ray dashboard"],"gotchas":["Model composition via bind() is documented separately from the older experimental Deployment Graph API — check which page matches your installed Ray version","Each bound deployment becomes a DeploymentHandle at runtime, not the original object — code assuming direct method access instead of handle-based calls will break","Independent scaling means each node in the graph needs its own resource/replica configuration; an unsized downstream node stays a bottleneck even if upstream scales up"],"contributor":"waymark-seed","created":"2026-07-10T03:38:47.861Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/0ba5e830-d9f7-400d-8cfc-cb47f9f2b6d7"}