Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
generation_routing.hpp
Go to the documentation of this file.
1#pragma once
2
21
23
24#include <cstddef>
25#include <cstdint>
26
27namespace pulp::format {
28
47
48inline constexpr std::size_t kGenerationJobClassCount = 3;
49
51enum class GenerationRoute : std::uint8_t {
55 Server = 1,
58};
59
60inline constexpr std::size_t kGenerationRouteCount = 3;
61
69enum class GenerationHostContext : std::uint8_t {
74};
75
76inline constexpr std::size_t kGenerationHostContextCount = 2;
77
79enum class GenerationConnectivity : std::uint8_t {
80 Online = 0,
82};
83
84inline constexpr std::size_t kGenerationConnectivityCount = 2;
85
86namespace detail {
87
101inline constexpr GenerationRoute
103 // Constrained: never local. The rung is defined as review-and-perform
104 // with no local realtime, so inference is out at every temperature.
107 // Standard: authoring-complete, but inference is not part of that
108 // promise, so it offloads at every temperature it can reach a server at.
111 // Full: precision authoring with headroom — the only rung that spends
112 // its own cycles on a proposal, and only while it is cool enough to.
115};
116
117} // namespace detail
118
126[[nodiscard]] constexpr GenerationRoute
129 GenerationConnectivity connectivity) noexcept {
130 const auto tier_index = static_cast<std::size_t>(tier);
131 const auto thermal_index = static_cast<std::size_t>(thermal);
132 const auto job_index = static_cast<std::size_t>(job);
133 const auto context_index = static_cast<std::size_t>(context);
134 const auto connectivity_index = static_cast<std::size_t>(connectivity);
135 if (tier_index >= platform::kDeviceCapabilityTierCount ||
136 thermal_index >= platform::kThermalStateCount ||
137 job_index >= kGenerationJobClassCount ||
138 context_index >= kGenerationHostContextCount ||
139 connectivity_index >= kGenerationConnectivityCount) {
140 // No unrecognized discriminator may select local or server work. This
141 // also makes extending any vocabulary fail closed until the routing
142 // policy explicitly adopts the new value.
144 }
145
146 // Playing an existing artifact and rendering a receipt are local work that
147 // needs no server and must survive every degradation. Answering them first
148 // keeps them out of reach of the connectivity and thermal rules below.
151 }
152
153 // Offline outranks the table: with no server reachable, the only honest
154 // answers are "run it here" or "hold it", and an AUv3 may not run it here.
155 if (connectivity == GenerationConnectivity::Offline) {
156 const auto local = tier == platform::DeviceCapabilityTier::Full &&
160 }
161
162 const auto route = detail::kProposalRouteTable[tier_index][thermal_index];
163
164 // An AUv3 never spends its host's memory budget on inference, whatever the
165 // table says. This is a hard substitution rather than a separate table so
166 // that no future edit to the table can accidentally grant it.
169 }
170 return route;
171}
172
177[[nodiscard]] constexpr bool runs_inference_on_device(GenerationJobClass job,
178 GenerationRoute route) noexcept {
180}
181
182} // namespace pulp::format
The plugin processor interface.
Definition device_quotas.hpp:67
constexpr GenerationRoute kProposalRouteTable[platform::kDeviceCapabilityTierCount][platform::kThermalStateCount]
Baseline route for ProposalGeneration, indexed [tier][thermal state].
Definition generation_routing.hpp:102
What the product grants a device: the quota table indexed by capability tier and live thermal state.
Definition aax_editor.hpp:31
constexpr std::size_t kGenerationJobClassCount
Definition generation_routing.hpp:48
GenerationHostContext
The surface the product is running as.
Definition generation_routing.hpp:69
@ Standalone
Pulp's own application process.
Definition generation_routing.hpp:71
@ AudioUnitV3
An AUv3 extension hosted by another application.
Definition generation_routing.hpp:73
constexpr std::size_t kGenerationHostContextCount
Definition generation_routing.hpp:76
constexpr std::size_t kGenerationConnectivityCount
Definition generation_routing.hpp:84
GenerationConnectivity
Whether the device can reach a server right now.
Definition generation_routing.hpp:79
@ Online
Definition generation_routing.hpp:80
@ Offline
Definition generation_routing.hpp:81
constexpr GenerationRoute generation_route(platform::DeviceCapabilityTier tier, platform::ThermalState thermal, GenerationJobClass job, GenerationHostContext context, GenerationConnectivity connectivity) noexcept
Returns where job runs on a device at tier and thermal, running as context with connectivity.
Definition generation_routing.hpp:127
GenerationJobClass
A kind of generation work, distinguished by what it costs and what it needs.
Definition generation_routing.hpp:35
@ ProposalGeneration
Producing a new proposal.
Definition generation_routing.hpp:38
@ ReceiptRendering
Rendering a receipt for work already done.
Definition generation_routing.hpp:45
@ ArtifactPlayback
Playing an artifact that has already been materialized.
Definition generation_routing.hpp:41
constexpr bool runs_inference_on_device(GenerationJobClass job, GenerationRoute route) noexcept
Returns whether route performs inference on this device.
Definition generation_routing.hpp:177
GenerationRoute
Where a job is sent.
Definition generation_routing.hpp:51
@ OnDevice
Runs locally on this device.
Definition generation_routing.hpp:53
@ QueueForLater
Accepted and deferred; runs when connectivity or headroom returns.
Definition generation_routing.hpp:57
@ Server
Sent to a server for execution now.
Definition generation_routing.hpp:55
constexpr std::size_t kGenerationRouteCount
Definition generation_routing.hpp:60
constexpr std::size_t kDeviceCapabilityTierCount
Definition device_capability.hpp:49
DeviceCapabilityTier
How much of the product a device can carry, on one ascending ladder.
Definition device_capability.hpp:43
@ Full
Definition device_capability.hpp:46
ThermalState
Live thermal pressure, ascending in heat.
Definition device_capability.hpp:64
@ Nominal
Definition device_capability.hpp:65
constexpr std::size_t kThermalStateCount
Definition device_capability.hpp:71