Example 1: 50 requests a second, p95 under 4 seconds
Input: load = {'requests_per_s': 50, 'input_tokens': 1800, 'output_tokens': 250}
options = [{'name': 'small-l4', 'prefill_tokens_per_s': 12000, 'decode_tokens_per_s': 90, 'max_concurrent': 32, 'cost_per_hour': 0.8}, {'name': 'small-a100', 'prefill_tokens_per_s': 30000, 'decode_tokens_per_s': 140, 'max_concurrent': 64, 'cost_per_hour': 2.2}, {'name': 'large-h100', 'prefill_tokens_per_s': 40000, 'decode_tokens_per_s': 110, 'max_concurrent': 128, 'cost_per_hour': 4.5}, {'name': 'small-h100', 'prefill_tokens_per_s': 60000, 'decode_tokens_per_s': 200, 'max_concurrent': 80, 'cost_per_hour': 4}]
slo_p95_seconds = 4
Output: {'option': 'small-a100', 'replicas': 3, 'p95_seconds': 2.77, 'monthly_cost': 4818}
Explanation: Without headroom, small-h100 looks cheapest. Using mean latency instead of p95, small-l4 does.
Example 2: An SLO nothing can meet
Input: load = {'requests_per_s': 50, 'input_tokens': 1800, 'output_tokens': 250}
options = [{'name': 'small-l4', 'prefill_tokens_per_s': 12000, 'decode_tokens_per_s': 90, 'max_concurrent': 32, 'cost_per_hour': 0.8}, {'name': 'small-a100', 'prefill_tokens_per_s': 30000, 'decode_tokens_per_s': 140, 'max_concurrent': 64, 'cost_per_hour': 2.2}, {'name': 'large-h100', 'prefill_tokens_per_s': 40000, 'decode_tokens_per_s': 110, 'max_concurrent': 128, 'cost_per_hour': 4.5}, {'name': 'small-h100', 'prefill_tokens_per_s': 60000, 'decode_tokens_per_s': 200, 'max_concurrent': 80, 'cost_per_hour': 4}]
slo_p95_seconds = 1
Output: None
Example 3: A quiet day: 2 requests a second
Input: load = {'requests_per_s': 2, 'input_tokens': 1800, 'output_tokens': 250}
options = [{'name': 'small-l4', 'prefill_tokens_per_s': 12000, 'decode_tokens_per_s': 90, 'max_concurrent': 32, 'cost_per_hour': 0.8}, {'name': 'small-a100', 'prefill_tokens_per_s': 30000, 'decode_tokens_per_s': 140, 'max_concurrent': 64, 'cost_per_hour': 2.2}, {'name': 'large-h100', 'prefill_tokens_per_s': 40000, 'decode_tokens_per_s': 110, 'max_concurrent': 128, 'cost_per_hour': 4.5}, {'name': 'small-h100', 'prefill_tokens_per_s': 60000, 'decode_tokens_per_s': 200, 'max_concurrent': 80, 'cost_per_hour': 4}]
slo_p95_seconds = 5
Output: {'option': 'small-l4', 'replicas': 1, 'p95_seconds': 4.39, 'monthly_cost': 584}