Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions robusta_krr/strategies/simple_limit.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
class SimpleLimitStrategySettings(StrategySettings):
cpu_request: float = pd.Field(66, gt=0, le=100, description="The percentile to use for the CPU request.")
cpu_limit: float = pd.Field(96, gt=0, le=100, description="The percentile to use for the CPU limit.")
cpu_limit_multiplier: float = pd.Field(
1.0, gt=0, description="Multiplier for CPU limit based on percentile. For example, 2.0 means 200% of percentile, 1.5 means 150%."
)
memory_buffer_percentage: float = pd.Field(
15, gt=0, description="The percentage of added buffer to the peak memory usage for memory recommendation."
)
Expand Down Expand Up @@ -92,13 +95,14 @@ def metrics(self) -> list[type[PrometheusMetric]]:

@property
def description(self):
cpu_limit_percentage = int(self.settings.cpu_limit_multiplier * 100)
s = textwrap.dedent(f"""\
CPU request: {self.settings.cpu_request}% percentile, limit: {self.settings.cpu_limit}% percentile
CPU request: {self.settings.cpu_request}% percentile, limit: {cpu_limit_percentage}% of {self.settings.cpu_limit}% percentile
Memory request: max + {self.settings.memory_buffer_percentage}%, limit: max + {self.settings.memory_buffer_percentage}%
History: {self.settings.history_duration} hours
Step: {self.settings.timeframe_duration} minutes

All parameters can be customized. For example: `krr simple_limit --cpu_request=66 --cpu_limit=96 --memory_buffer_percentage=15 --history_duration=24 --timeframe_duration=0.5`
All parameters can be customized. For example: `krr simple_limit --cpu_request=66 --cpu_limit=96 --cpu_limit_multiplier=2.0 --memory_buffer_percentage=15 --history_duration=24 --timeframe_duration=0.5`
""")
Comment on lines +98 to 106
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Improve description clarity and handle decimal multipliers properly.

The description formatting has some clarity issues:

  1. Converting the multiplier to an integer percentage (int(self.settings.cpu_limit_multiplier * 100)) truncates decimal values, which could be misleading for multipliers like 1.5.
  2. The description format "200% of 96% percentile" might be confusing - consider a clearer format.

Apply this diff to improve clarity:

-        cpu_limit_percentage = int(self.settings.cpu_limit_multiplier * 100)
+        cpu_limit_multiplier = self.settings.cpu_limit_multiplier
         s = textwrap.dedent(f"""\
-            CPU request: {self.settings.cpu_request}% percentile, limit: {cpu_limit_percentage}% of {self.settings.cpu_limit}% percentile
+            CPU request: {self.settings.cpu_request}% percentile, limit: {self.settings.cpu_limit}% percentile × {cpu_limit_multiplier}
             Memory request: max + {self.settings.memory_buffer_percentage}%, limit: max + {self.settings.memory_buffer_percentage}%
             History: {self.settings.history_duration} hours
             Step: {self.settings.timeframe_duration} minutes
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
cpu_limit_percentage = int(self.settings.cpu_limit_multiplier * 100)
s = textwrap.dedent(f"""\
CPU request: {self.settings.cpu_request}% percentile, limit: {self.settings.cpu_limit}% percentile
CPU request: {self.settings.cpu_request}% percentile, limit: {cpu_limit_percentage}% of {self.settings.cpu_limit}% percentile
Memory request: max + {self.settings.memory_buffer_percentage}%, limit: max + {self.settings.memory_buffer_percentage}%
History: {self.settings.history_duration} hours
Step: {self.settings.timeframe_duration} minutes
All parameters can be customized. For example: `krr simple_limit --cpu_request=66 --cpu_limit=96 --memory_buffer_percentage=15 --history_duration=24 --timeframe_duration=0.5`
All parameters can be customized. For example: `krr simple_limit --cpu_request=66 --cpu_limit=96 --cpu_limit_multiplier=2.0 --memory_buffer_percentage=15 --history_duration=24 --timeframe_duration=0.5`
""")
cpu_limit_multiplier = self.settings.cpu_limit_multiplier
s = textwrap.dedent(f"""\
CPU request: {self.settings.cpu_request}% percentile, limit: {self.settings.cpu_limit}% percentile × {cpu_limit_multiplier}
Memory request: max + {self.settings.memory_buffer_percentage}%, limit: max + {self.settings.memory_buffer_percentage}%
History: {self.settings.history_duration} hours
Step: {self.settings.timeframe_duration} minutes
All parameters can be customized. For example: `krr simple_limit --cpu_request=66 --cpu_limit=96 --cpu_limit_multiplier=2.0 --memory_buffer_percentage=15 --history_duration=24 --timeframe_duration=0.5`
""")
🤖 Prompt for AI Agents
In robusta_krr/strategies/simple_limit.py around lines 98 to 106, the current
code converts cpu_limit_multiplier to an integer percentage, truncating decimals
and causing potential confusion in the description format. To fix this, keep the
multiplier as a float and format it with one or two decimal places to preserve
precision. Also, rephrase the description to clearly explain the relationship,
for example by stating "CPU limit: cpu_limit_multiplier times the cpu_limit
percentile" instead of using percentage multiplication wording.


if not self.settings.allow_hpa:
Expand Down Expand Up @@ -136,7 +140,8 @@ def __calculate_cpu_proposal(
return ResourceRecommendation.undefined(info="HPA detected")

cpu_request = self.settings.calculate_cpu_percentile(data, self.settings.cpu_request)
cpu_limit = self.settings.calculate_cpu_percentile(data, self.settings.cpu_limit)
cpu_limit_base = self.settings.calculate_cpu_percentile(data, self.settings.cpu_limit)
cpu_limit = cpu_limit_base * self.settings.cpu_limit_multiplier
return ResourceRecommendation(request=cpu_request, limit=cpu_limit)

def __calculate_memory_proposal(
Expand Down