Skip to content

[MISC] Remove max_time from SDK1 retry decorator#1800

Merged
chandrasekharan-zipstack merged 3 commits intomainfrom
UN-3154-increase-prompt-service-retry-max-time
Feb 26, 2026
Merged

[MISC] Remove max_time from SDK1 retry decorator#1800
chandrasekharan-zipstack merged 3 commits intomainfrom
UN-3154-increase-prompt-service-retry-max-time

Conversation

@chandrasekharan-zipstack
Copy link
Contributor

@chandrasekharan-zipstack chandrasekharan-zipstack commented Feb 23, 2026

What

  • Remove max_time parameter from SDK1 retry decorator entirely

Why

  • max_time acted as a wall-clock budget including the initial attempt, causing retries to never fire for long-running LLM calls (60-600s+)
  • It also had a bug where it was passed as max_delay to calculate_delay, allowing a single backoff delay up to max_time seconds
  • max_retries is the correct mechanism to limit retries; per-retry delay is now capped at 60s as a safety net

How

  • Removed all max_time related parameters, environment variables, and logic from the SDK1 retry decorator
  • Simplified retry behavior to rely solely on max_retries with a 60s delay cap

Can this PR break any existing features. If yes, please list possible items. If no, please explain why. (PS: Admins do not merge the PR without this section filled)

  • Low risk. max_time was effectively broken for long-running LLM calls (it prevented retries from firing). Removing it makes retries actually work as intended.

Database Migrations

  • None

Env Config

  • Removed MAX_TIME env var from SDK1

Relevant Docs

  • N/A

Related Issues or PRs

  • N/A

Dependencies Versions

  • N/A

Notes on Testing

  • All 46 SDK1 retry tests pass (3 max_time-specific tests removed)
  • Run an API deployment or workflow execution to verify retry behavior under transient failures
  • Verify no references to MAX_TIME env var remain in SDK1

Screenshots

N/A

Checklist

I have read and understood the Contribution Guidelines.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 23, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between ae5565b and fc73fdb.

📒 Files selected for processing (1)
  • .gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • .gitignore

Summary by CodeRabbit

  • Documentation

    • Removed MAX_TIME and related environment-variable references from retry docs and README.
  • Refactor

    • Simplified retry behavior by removing the configurable total-time parameter; retry delays now use a fixed 60s cap.
  • Tests

    • Updated tests and fixtures to match the revised retry API and removed env-var cleanups.
  • Chores

    • Tightened .gitignore rules to narrow excluded paths.

Walkthrough

Removed configurable total-time cap (max_time) from retry utilities and related docs; retry logic no longer performs elapsed-time checks and always uses a fixed 60.0s cap for next-delay calculations. Docstrings, README, fixtures, and tests were updated to match the simplified API.

Changes

Cohort / File(s) Summary
Documentation
unstract/sdk1/README.md, unstract/sdk1/src/unstract/sdk1/platform.py, unstract/sdk1/src/unstract/sdk1/prompt.py
Deleted references to MAX_TIME, PLATFORM_SERVICE_MAX_TIME, and PROMPT_SERVICE_MAX_TIME from retry configuration tables and docstrings.
Core Retry Logic
unstract/sdk1/src/unstract/sdk1/utils/retry_utils.py
Removed max_time: float parameter from retry_with_exponential_backoff; eliminated elapsed-time checks, related logging/validation, and environment handling for MAX_TIME. Next-delay calculation now uses a fixed 60.0s cap. create_retry_decorator no longer propagates max_time; docstrings/examples updated.
Tests & Fixtures
unstract/sdk1/tests/conftest.py, unstract/sdk1/tests/utils/test_retry_utils.py
Removed cleanup of PLATFORM_SERVICE_MAX_TIME and PROMPT_SERVICE_MAX_TIME from clean_env fixture; updated tests to remove max_time argument and align with the new retry API.
Repository config
.gitignore
Adjusted .claude ignore rules to allow tracking the skills/worktree subdirectory while continuing to ignore other skills contents.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and concisely identifies the main change: removing the max_time parameter from the SDK1 retry decorator, which aligns with the primary objective of the changeset.
Description check ✅ Passed The PR description is comprehensive and complete, covering all required template sections: What, Why, How, breaking changes assessment, env config changes, testing notes, and the required checklist confirmation.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch UN-3154-increase-prompt-service-retry-max-time

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
backend/sample.env (1)

87-89: Same missing explanatory comment line as workers/sample.env — the fix diff above applies here identically.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@backend/sample.env` around lines 87 - 89, The environment variable
PROMPT_SERVICE_MAX_TIME is missing the explanatory comment present in the
counterpart workers/sample.env; update the backend/sample.env entry for
PROMPT_SERVICE_MAX_TIME to include the same explanatory comment describing that
this is the retry configuration for prompt service calls (SDK1) and that it
should be set high enough to allow at least one retry after long-running LLM
calls, matching the comment used alongside PROMPT_SERVICE_MAX_TIME in
workers/sample.env so both files stay consistent.
🧹 Nitpick comments (1)
workers/sample.env (1)

237-239: Minor: missing explanatory comment line (inconsistent with tools/structure/sample.env).

Both workers/sample.env and backend/sample.env (line 87–89) are missing the third comment that explains why this value must be so large — the same line present in tools/structure/sample.env:

 # Retry configuration for prompt service calls (SDK1)
 # Set high enough to allow at least 1 retry after long-running LLM calls
+# since max_time is a total wall-clock budget including the initial attempt
 PROMPT_SERVICE_MAX_TIME=1800

This is the most operationally useful comment; without it, future tuners lose the key insight that max_time covers the initial attempt and any retries combined.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@workers/sample.env` around lines 237 - 239, Add the missing explanatory
comment above PROMPT_SERVICE_MAX_TIME that explains this max_time covers the
total duration for the initial attempt plus any retries (hence must be large to
allow at least one retry after long-running LLM calls); update both
workers/sample.env and backend/sample.env to mirror the comment used in
tools/structure/sample.env so future tuners understand why
PROMPT_SERVICE_MAX_TIME is large.
ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between d7babec and a0d9b8b.

📒 Files selected for processing (3)
  • backend/sample.env
  • tools/structure/sample.env
  • workers/sample.env
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@workers/sample.env`:
- Around line 237-239: Add the PROMPT_SERVICE_MAX_TIME setting to the other
SDK1-dependent sample.env files by inserting the same comment and variable
declaration as shown (a comment "Retry configuration for prompt service calls
(SDK1)" and the line PROMPT_SERVICE_MAX_TIME=1800) into each file that
configures SDK1 (the classifier, text_extractor, platform-service and
prompt-service sample.envs); place it near the existing SDK1-related
timeout/retry settings so it’s visible alongside other prompt service config.

---

Duplicate comments:
In `@backend/sample.env`:
- Around line 87-89: The environment variable PROMPT_SERVICE_MAX_TIME is missing
the explanatory comment present in the counterpart workers/sample.env; update
the backend/sample.env entry for PROMPT_SERVICE_MAX_TIME to include the same
explanatory comment describing that this is the retry configuration for prompt
service calls (SDK1) and that it should be set high enough to allow at least one
retry after long-running LLM calls, matching the comment used alongside
PROMPT_SERVICE_MAX_TIME in workers/sample.env so both files stay consistent.

---

Nitpick comments:
In `@workers/sample.env`:
- Around line 237-239: Add the missing explanatory comment above
PROMPT_SERVICE_MAX_TIME that explains this max_time covers the total duration
for the initial attempt plus any retries (hence must be large to allow at least
one retry after long-running LLM calls); update both workers/sample.env and
backend/sample.env to mirror the comment used in tools/structure/sample.env so
future tuners understand why PROMPT_SERVICE_MAX_TIME is large.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
unstract/workflow-execution/src/unstract/workflow_execution/tools_utils.py (1)

237-238: Consider guarding against a non-numeric value being forwarded.

The implementation correctly follows the established pattern for optional env vars and the truthiness guard handles None/"" properly. One optional improvement: since PROMPT_SERVICE_MAX_TIME must be a positive integer for SDK1 to accept it, a lightweight validation (e.g. str.isdigit()) before forwarding would surface misconfiguration at the workflow-execution layer rather than silently inside the tool container.

-        if self.prompt_service_max_time:
-            platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME] = self.prompt_service_max_time
+        if self.prompt_service_max_time:
+            if not self.prompt_service_max_time.isdigit():
+                logger.warning(
+                    f"Invalid {ToolRV.PROMPT_SERVICE_MAX_TIME}="
+                    f"'{self.prompt_service_max_time}'; expected a positive integer. Skipping."
+                )
+            else:
+                platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME] = self.prompt_service_max_time

That said, this is fully optional — the existing pattern for ADAPTER_LLMW_* omits this check too, so deferring to a follow-up is reasonable.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@unstract/workflow-execution/src/unstract/workflow_execution/tools_utils.py`
around lines 237 - 238, The code forwards self.prompt_service_max_time to
platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME] without validating it's a positive
integer; add a lightweight guard in the same location (in
unstract.workflow_execution.tools_utils near where self.prompt_service_max_time
is checked) that verifies the value is numeric and positive (e.g.,
str(self.prompt_service_max_time).isdigit() and int(...) > 0) before setting
platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME]; if validation fails, skip setting
the env var and optionally log a warning/error referencing
prompt_service_max_time so misconfiguration is surfaced early.
ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between a0d9b8b and 92b07b9.

📒 Files selected for processing (2)
  • unstract/workflow-execution/src/unstract/workflow_execution/constants.py
  • unstract/workflow-execution/src/unstract/workflow_execution/tools_utils.py
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@unstract/workflow-execution/src/unstract/workflow_execution/tools_utils.py`:
- Around line 237-238: The code forwards self.prompt_service_max_time to
platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME] without validating it's a positive
integer; add a lightweight guard in the same location (in
unstract.workflow_execution.tools_utils near where self.prompt_service_max_time
is checked) that verifies the value is numeric and positive (e.g.,
str(self.prompt_service_max_time).isdigit() and int(...) > 0) before setting
platform_vars[ToolRV.PROMPT_SERVICE_MAX_TIME]; if validation fails, skip setting
the env var and optionally log a warning/error referencing
prompt_service_max_time so misconfiguration is surfaced early.

max_time acted as a wall-clock budget including the initial attempt,
causing retries to never fire for long-running LLM calls (60-600s+).
It also had a bug where it was passed as max_delay to calculate_delay,
allowing a single backoff delay up to max_time seconds.

max_retries is the correct mechanism to limit retries. Per-retry delay
is now capped at 60s as a safety net.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@chandrasekharan-zipstack chandrasekharan-zipstack force-pushed the UN-3154-increase-prompt-service-retry-max-time branch from 92b07b9 to 5df51c4 Compare February 23, 2026 15:49
@chandrasekharan-zipstack chandrasekharan-zipstack changed the title UN-3154 [FIX] Increase PROMPT_SERVICE_MAX_TIME to allow retries for long LLM calls UN-3154 [FIX] Remove max_time from SDK1 retry decorator Feb 23, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
unstract/sdk1/src/unstract/sdk1/utils/retry_utils.py (1)

155-156: Hardcoded magic number 60.0 — extract to a named constant.

The 60.0 max-delay cap is an undocumented magic number. Consider extracting it to a module-level constant (e.g., MAX_RETRY_DELAY_SECONDS = 60.0) for clarity and easier future adjustment.

♻️ Suggested refactor
+MAX_RETRY_DELAY_SECONDS = 60.0
+
+
 def retry_with_exponential_backoff(  # noqa: C901
     ...
-                    # Calculate delay for next retry (capped at 60s)
-                    delay = calculate_delay(attempt, base_delay, multiplier, 60.0, jitter)
+                    # Calculate delay for next retry
+                    delay = calculate_delay(
+                        attempt, base_delay, multiplier, MAX_RETRY_DELAY_SECONDS, jitter
+                    )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@unstract/sdk1/src/unstract/sdk1/utils/retry_utils.py` around lines 155 - 156,
The hardcoded max delay 60.0 used when calling calculate_delay should be
extracted to a module-level named constant (e.g., MAX_RETRY_DELAY_SECONDS =
60.0) and used in the call instead of the literal; update the call in the retry
logic that computes delay (where calculate_delay(attempt, base_delay,
multiplier, 60.0, jitter) is invoked) to use MAX_RETRY_DELAY_SECONDS, and add a
short doc comment on the constant explaining it caps exponential backoff delays.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@unstract/sdk1/src/unstract/sdk1/utils/retry_utils.py`:
- Around line 155-156: The hardcoded max delay 60.0 used when calling
calculate_delay should be extracted to a module-level named constant (e.g.,
MAX_RETRY_DELAY_SECONDS = 60.0) and used in the call instead of the literal;
update the call in the retry logic that computes delay (where
calculate_delay(attempt, base_delay, multiplier, 60.0, jitter) is invoked) to
use MAX_RETRY_DELAY_SECONDS, and add a short doc comment on the constant
explaining it caps exponential backoff delays.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 92b07b9 and 5df51c4.

📒 Files selected for processing (6)
  • unstract/sdk1/README.md
  • unstract/sdk1/src/unstract/sdk1/platform.py
  • unstract/sdk1/src/unstract/sdk1/prompt.py
  • unstract/sdk1/src/unstract/sdk1/utils/retry_utils.py
  • unstract/sdk1/tests/conftest.py
  • unstract/sdk1/tests/utils/test_retry_utils.py
💤 Files with no reviewable changes (5)
  • unstract/sdk1/src/unstract/sdk1/prompt.py
  • unstract/sdk1/tests/utils/test_retry_utils.py
  • unstract/sdk1/README.md
  • unstract/sdk1/src/unstract/sdk1/platform.py
  • unstract/sdk1/tests/conftest.py

@chandrasekharan-zipstack
Copy link
Contributor Author

Closing in favor of new PR from renamed branch UN-3154-remove-retry-max-time

@chandrasekharan-zipstack chandrasekharan-zipstack deleted the UN-3154-increase-prompt-service-retry-max-time branch February 23, 2026 16:01
@chandrasekharan-zipstack chandrasekharan-zipstack changed the title UN-3154 [FIX] Remove max_time from SDK1 retry decorator [MISC] Remove max_time from SDK1 retry decorator Feb 23, 2026
@chandrasekharan-zipstack chandrasekharan-zipstack restored the UN-3154-increase-prompt-service-retry-max-time branch February 23, 2026 18:02
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.gitignore:
- Line 692: The unignore for .claude/skills/worktree won't match because parent
directories are still ignored by the .claude/* rule; update the .gitignore so
you first unignore the parent directories (e.g., add exceptions for .claude/ and
.claude/skills/) before the existing !.claude/skills/worktree entry and ensure
the unignore lines appear after the broader .claude/* ignore rule so nested
files under .claude/skills/worktree are actually tracked.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 5df51c4 and ae5565b.

📒 Files selected for processing (1)
  • .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@chandrasekharan-zipstack chandrasekharan-zipstack force-pushed the UN-3154-increase-prompt-service-retry-max-time branch from ae5565b to fc73fdb Compare February 26, 2026 06:22
@github-actions
Copy link
Contributor

Test Results

Summary
  • Runner Tests: 11 passed, 0 failed (11 total)
  • SDK1 Tests: 63 passed, 0 failed (63 total)

Runner Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_logs}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup\_skip}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_client\_init}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config\_without\_mount}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_run\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_for\_sidecar}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_sidecar\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{11}}$$ $$\textcolor{#23d18b}{\tt{11}}$$
SDK1 Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_non\_retryable\_http\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retryable\_http\_errors}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_post\_method\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_logging}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_retry\_on\_errors}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_wrapper\_methods\_retry}}$$ $$\textcolor{#23d18b}{\tt{4}}$$ $$\textcolor{#23d18b}{\tt{4}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_connection\_error\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_timeout\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_non\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_without\_response}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_non\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_other\_exception\_not\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_without\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_successful\_call\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_after\_transient\_failure}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_retries\_exceeded}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_with\_custom\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_no\_retry\_with\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_exception\_not\_in\_tuple\_not\_retried}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_default\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_environment\_variable\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_retries}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_base\_delay}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_multiplier}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_jitter\_values}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_exceptions\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_predicate\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_both\_exceptions\_and\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_exceptions\_match\_but\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_platform\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_prompt\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_platform\_service\_decorator\_retries\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_prompt\_service\_decorator\_retries\_on\_timeout}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_warning\_logged\_on\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_info\_logged\_on\_success\_after\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_exception\_logged\_on\_giving\_up}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{63}}$$ $$\textcolor{#23d18b}{\tt{63}}$$

@sonarqubecloud
Copy link

@chandrasekharan-zipstack chandrasekharan-zipstack merged commit 2a7ee4a into main Feb 26, 2026
7 checks passed
@chandrasekharan-zipstack chandrasekharan-zipstack deleted the UN-3154-increase-prompt-service-retry-max-time branch February 26, 2026 06:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants