* UN-2793 [FEAT] Add retry logic with exponential backoff to SDK1 Implemented automatic retry logic for platform and prompt service calls with configurable exponential backoff, comprehensive test coverage, and CI integration. Features: - Exponential backoff with jitter for transient failures - Configurable via environment variables (MAX_RETRIES, MAX_TIME, BASE_DELAY, etc.) - Retries ConnectionError, Timeout, HTTPError (502/503/504), OSError - 67 tests with 100% pass rate - CI integration with test reporting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * [SECURITY] Use full commit SHA for sticky-pull-request-comment action Replace tag reference with full commit SHA for better security: - marocchino/sticky-pull-request-comment@v2 → @7737449 (v2.9.4) This prevents potential supply chain attacks where tags could be moved to point to malicious code. Commit SHAs are immutable. Fixes SonarQube security hotspot for external GitHub action. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * [FIX] Allow retryable HTTP errors (502/503/504) to propagate for retry Fixed HTTPError handling in _get_adapter_configuration to check status codes and re-raise retryable errors (502, 503, 504) so the retry decorator can handle them. Non-retryable errors are still converted to SdkError as before. Changes: - Check HTTPError status code before converting to SdkError - Re-raise HTTPError for 502/503/504 to allow retry decorator to retry - Added parametrized test for all retryable status codes (502, 503, 504) - All 12 platform tests pass This fixes a bug where 502/503/504 errors were not being retried because they were converted to SdkError before the retry decorator could see them. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * [FIX] Use pytest.approx() for floating point comparisons in tests Replaced direct equality comparisons (==) with pytest.approx() for floating point values to avoid precision issues and satisfy SonarQube code quality check (python:S1244). Changes in test_retry_utils.py: - test_exponential_backoff_without_jitter: Use pytest.approx() for 1.0, 2.0, 4.0, 8.0 - test_max_delay_cap: Use pytest.approx() for 5.0 This is the proper way to compare floating point values in tests, accounting for floating point precision limitations. All 4 TestCalculateDelay tests pass. Fixes SonarQube: python:S1244 - Do not perform equality checks with floating point values. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * minor: Addressed code smells, ruff fixes * misc: Fixed tox config for sdk1 tests * misc: Ruff issues fixed * misc: tox tests fixed * prompt service lock file for venv * updated lock files for backend and prompt-service * UN-2793 [FEAT] Update to unstract-sdk v0.78.0 with retry logic support (#1567) [FEAT] Update unstract-sdk to v0.78.0 across all services and tools - Updated unstract-sdk dependency from v0.77.3 to v0.78.0 in all pyproject.toml files - Main repository, backend, workers, platform-service, prompt-service - filesystem and tool-registry modules - Updated tool requirements.txt files (structure, classifier, text_extractor) - Bumped tool versions in properties.json: - Structure tool: 0.0.88 → 0.0.89 - Classifier tool: 0.0.68 → 0.0.69 - Text extractor tool: 0.0.64 → 0.0.65 - Updated tool versions in backend/sample.env and public_tools.json - Regenerated all uv.lock files with new SDK version This update brings in the retry logic with exponential backoff from unstract-sdk v0.78.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com> --------- Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Platform Service
Platform service is a REST API interface for the SDK to talk to the platform.
Prerequisites
- Uploads directory to be created.
/tmp/platform_service/uploadsNote that this can be changed using the environment variables. The variable to change isUPLOAD_FOLDER. - Postgres server with
pg_vectorextension installed - Databases
unstractandunstract_vectorsmust be available in Postgres
Environment Variables
This service requires a few environment variables to be set. Take a look at sample.env. Make a copy of this file and
name it as .env. Then fill in the values for the variables. The .env file automatically gets loaded when the service
is started.
Running the service
Setup a virtual environment and install the requirements:
uv venv
Once a virtual environment is created or if you already have created one, activate it:
source .venv/bin/activate
Install the dependencies needed to run the service
uv sync
To run the service locally (make sure the .env file is present):
flask run --host localhost --port 3001
Note that this is for debugging purposes only. Please follow the good practices for running a Flash application in production