sdkrouter 0.1.13__tar.gz → 0.1.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/PKG-INFO +311 -5
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/README.md +309 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/pyproject.toml +2 -5
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/__init__.py +28 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/client.py +9 -2
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/__init__.py +4 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/__init__.py +8 -8
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/cdn/cdn__api__cdn/__init__.py +27 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/cdn__api__cdn/client.py +60 -12
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/cdn__api__cdn/models.py +28 -16
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/cdn__api__cdn/sync_client.py +60 -12
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/cdn/helpers/__init__.py +11 -0
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/cleaner → sdkrouter-0.1.17/src/sdkrouter/_api/generated/cdn/helpers}/logger.py +11 -10
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/cleaner → sdkrouter-0.1.17/src/sdkrouter/_api/generated/cdn/helpers}/retry.py +22 -17
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/image_gen → sdkrouter-0.1.17/src/sdkrouter/_api/generated/cdn}/pyproject.toml +1 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cdn/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/__init__.py +12 -8
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/cleaner/cleaner__api__cleaner/__init__.py +29 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/cleaner__api__cleaner/client.py +57 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/cleaner__api__cleaner/models.py +16 -12
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/cleaner__api__cleaner/sync_client.py +57 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/cleaner/helpers/__init__.py +11 -0
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/image_gen → sdkrouter-0.1.17/src/sdkrouter/_api/generated/cleaner/helpers}/logger.py +11 -10
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/image_gen → sdkrouter-0.1.17/src/sdkrouter/_api/generated/cleaner/helpers}/retry.py +22 -17
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/pyproject.toml +1 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/cleaner/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/__init__.py +12 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/image_gen/helpers/__init__.py +11 -0
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/models → sdkrouter-0.1.17/src/sdkrouter/_api/generated/image_gen/helpers}/logger.py +11 -10
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/models → sdkrouter-0.1.17/src/sdkrouter/_api/generated/image_gen/helpers}/retry.py +22 -17
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/image_gen/image_gen__api__image_gen/__init__.py +25 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/image_gen__api__image_gen/client.py +46 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/image_gen__api__image_gen/models.py +83 -27
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/image_gen__api__image_gen/sync_client.py +42 -9
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/cdn → sdkrouter-0.1.17/src/sdkrouter/_api/generated/image_gen}/pyproject.toml +1 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/image_gen/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/__init__.py +14 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/enums.py +6 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/models/helpers/__init__.py +11 -0
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/cdn → sdkrouter-0.1.17/src/sdkrouter/_api/generated/models/helpers}/logger.py +11 -10
- {sdkrouter-0.1.13/src/sdkrouter/_api/generated/cdn → sdkrouter-0.1.17/src/sdkrouter/_api/generated/models/helpers}/retry.py +22 -17
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/models/models__api__llm_models/__init__.py +33 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/models__api__llm_models/client.py +68 -13
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/models__api__llm_models/models.py +82 -42
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/models__api__llm_models/sync_client.py +68 -13
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/pyproject.toml +1 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/models/sync_client.py +5 -6
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/__init__.py +220 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/client.py +74 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/enums.py +96 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/payments__api__payments/__init__.py +61 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/payments__api__payments/client.py +609 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/payments__api__payments/models.py +727 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/payments__api__payments/sync_client.py +601 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/pyproject.toml +56 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/payments/sync_client.py +57 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/__init__.py +218 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/client.py +74 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/enums.py +72 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/proxies__api__proxies/__init__.py +43 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/proxies__api__proxies/client.py +655 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/proxies__api__proxies/models.py +727 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/proxies__api__proxies/sync_client.py +647 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/pyproject.toml +56 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/proxies/sync_client.py +57 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/__init__.py +8 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/sdk_keys/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/sdk_keys/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/sdk_keys/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/sdk_keys/pyproject.toml +56 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/sdk_keys/sdk_keys__api__sdk_keys/__init__.py +21 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/sdk_keys__api__sdk_keys/client.py +53 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/sdk_keys__api__sdk_keys/models.py +45 -25
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/sdk_keys__api__sdk_keys/sync_client.py +53 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/sdk_keys/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/__init__.py +8 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/search/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/search/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/search/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/search/pyproject.toml +56 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/search/search__api__search/__init__.py +31 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/search__api__search/client.py +53 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/search__api__search/models.py +89 -71
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/search__api__search/sync_client.py +49 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/search/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/__init__.py +4 -5
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/client.py +9 -10
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/shortlinks/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/shortlinks/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/shortlinks/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/shortlinks/pyproject.toml +56 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/shortlinks/shortlinks__api__shortlinks/__init__.py +23 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/shortlinks__api__shortlinks/client.py +50 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/shortlinks__api__shortlinks/models.py +11 -11
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/shortlinks__api__shortlinks/sync_client.py +50 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/shortlinks/sync_client.py +5 -6
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/__init__.py +10 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/client.py +9 -10
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/enums.py +4 -5
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/vision/helpers/__init__.py +11 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/vision/helpers/logger.py +257 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/vision/helpers/retry.py +277 -0
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/vision/pyproject.toml +56 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/sync_client.py +5 -6
- sdkrouter-0.1.17/src/sdkrouter/_api/generated/vision/vision__api__vision/__init__.py +21 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/vision__api__vision/client.py +23 -5
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/vision__api__vision/models.py +25 -8
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/generated/vision/vision__api__vision/sync_client.py +19 -4
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_client.py +34 -0
- sdkrouter-0.1.17/src/sdkrouter/helpers/__init__.py +16 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/__init__.py +64 -0
- sdkrouter-0.1.17/src/sdkrouter/tools/payments.py +840 -0
- sdkrouter-0.1.17/src/sdkrouter/tools/proxies.py +1153 -0
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/cdn/cdn__api__cdn/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/cleaner/cleaner__api__cleaner/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/image_gen/image_gen__api__image_gen/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/models/models__api__llm_models/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/sdk_keys/logger.py +0 -256
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/sdk_keys/pyproject.toml +0 -55
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/sdk_keys/retry.py +0 -272
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/sdk_keys/sdk_keys__api__sdk_keys/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/search/logger.py +0 -256
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/search/pyproject.toml +0 -55
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/search/retry.py +0 -272
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/search/search__api__search/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/shortlinks/logger.py +0 -256
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/shortlinks/pyproject.toml +0 -55
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/shortlinks/retry.py +0 -272
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/shortlinks/shortlinks__api__shortlinks/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/vision/logger.py +0 -256
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/vision/pyproject.toml +0 -55
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/vision/retry.py +0 -272
- sdkrouter-0.1.13/src/sdkrouter/_api/generated/vision/vision__api__vision/__init__.py +0 -7
- sdkrouter-0.1.13/src/sdkrouter/helpers/__init__.py +0 -13
- sdkrouter-0.1.13/src/sdkrouter/helpers/formatting.py +0 -15
- sdkrouter-0.1.13/src/sdkrouter/helpers/html.py +0 -104
- sdkrouter-0.1.13/src/sdkrouter/helpers/json_cleaner.py +0 -53
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/.gitignore +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_api/__init__.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_config.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_constants.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/__init__.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/audio.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/cdn.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/models.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/ocr.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/parsed.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/shortlinks.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_types/vision.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/_version.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/exceptions/__init__.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/exceptions/handlers.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/exceptions/mappings.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/exceptions/types.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/logging.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/models/__init__.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/models/audio.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/models/llm.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/_polling.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/audio.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/cdn.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/cleaner.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/embeddings.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/image_gen.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/keys.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/models.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/search.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/shortlinks.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/tools/vision.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/utils/__init__.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/utils/parsing.py +0 -0
- {sdkrouter-0.1.13 → sdkrouter-0.1.17}/src/sdkrouter/utils/tokens.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sdkrouter
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.17
|
|
4
4
|
Summary: Unified SDK for AI services with OpenAI compatibility
|
|
5
5
|
Project-URL: Homepage, https://github.com/markolofsen/sdkrouter
|
|
6
6
|
Project-URL: Documentation, https://sdkrouter.com
|
|
@@ -17,17 +17,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
19
|
Requires-Python: >=3.10
|
|
20
|
-
Requires-Dist: beautifulsoup4>=4.12.0
|
|
21
20
|
Requires-Dist: httpx<1.0.0,>=0.28.0
|
|
22
|
-
Requires-Dist: lxml>=5.3.0
|
|
23
|
-
Requires-Dist: markdownify>=0.14.0
|
|
24
21
|
Requires-Dist: openai<3.0.0,>=2.0.0
|
|
25
22
|
Requires-Dist: pydantic-settings>=2.7.0
|
|
26
23
|
Requires-Dist: pydantic<3.0.0,>=2.10.0
|
|
27
24
|
Requires-Dist: rich>=14.0.0
|
|
25
|
+
Requires-Dist: sdkrouter-tools>=0.1.0
|
|
28
26
|
Requires-Dist: tenacity>=9.1.0
|
|
29
27
|
Requires-Dist: tiktoken>=0.8.0
|
|
30
|
-
Requires-Dist: toon-python>=0.1.2
|
|
31
28
|
Provides-Extra: dev
|
|
32
29
|
Requires-Dist: build>=1.2.0; extra == 'dev'
|
|
33
30
|
Requires-Dist: ipykernel>=6.0.0; extra == 'dev'
|
|
@@ -750,6 +747,284 @@ result = client.embeddings.create(
|
|
|
750
747
|
| `openai/text-embedding-3-large` | 3072 | Higher quality |
|
|
751
748
|
| `openai/text-embedding-ada-002` | 1536 | Legacy |
|
|
752
749
|
|
|
750
|
+
### Payments (Crypto)
|
|
751
|
+
|
|
752
|
+
Accept cryptocurrency payments and manage withdrawals:
|
|
753
|
+
|
|
754
|
+
```python
|
|
755
|
+
# Get current balance
|
|
756
|
+
balance = client.payments.get_balance()
|
|
757
|
+
print(f"Balance: ${balance.balance_usd}")
|
|
758
|
+
print(f"Total deposited: ${balance.total_deposited}")
|
|
759
|
+
|
|
760
|
+
# List available currencies
|
|
761
|
+
currencies = client.payments.list_currencies()
|
|
762
|
+
for c in currencies.results:
|
|
763
|
+
print(f"{c.code}: {c.name} ({c.network})")
|
|
764
|
+
|
|
765
|
+
# Get deposit estimate
|
|
766
|
+
estimate = client.payments.get_deposit_estimate(
|
|
767
|
+
currency_code="USDTTRC20",
|
|
768
|
+
amount_usd=100.00,
|
|
769
|
+
)
|
|
770
|
+
print(f"Crypto amount: {estimate.crypto_amount}")
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
#### Create Payment Invoice
|
|
774
|
+
|
|
775
|
+
```python
|
|
776
|
+
# Create a payment invoice
|
|
777
|
+
result = client.payments.create(
|
|
778
|
+
amount_usd="25.00",
|
|
779
|
+
currency_code="USDTTRC20",
|
|
780
|
+
description="Premium subscription",
|
|
781
|
+
client_reference_id="order_12345",
|
|
782
|
+
)
|
|
783
|
+
|
|
784
|
+
if result.success:
|
|
785
|
+
payment = result.payment
|
|
786
|
+
print(f"Pay {payment.pay_amount} to: {payment.pay_address}")
|
|
787
|
+
print(f"Payment URL: {payment.payment_url}")
|
|
788
|
+
print(f"Expires: {payment.expires_at}")
|
|
789
|
+
|
|
790
|
+
# Check payment status
|
|
791
|
+
status = client.payments.check_status(payment.id, refresh=True)
|
|
792
|
+
print(f"Status: {status.status}")
|
|
793
|
+
if status.transaction_hash:
|
|
794
|
+
print(f"Transaction: {status.transaction_hash}")
|
|
795
|
+
|
|
796
|
+
# List all payments
|
|
797
|
+
payments = client.payments.list(page=1, page_size=10)
|
|
798
|
+
for p in payments.results:
|
|
799
|
+
print(f"{p.internal_payment_id}: ${p.amount_usd} - {p.status}")
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
#### Transaction History
|
|
803
|
+
|
|
804
|
+
```python
|
|
805
|
+
# List transactions
|
|
806
|
+
transactions = client.payments.list_transactions(page=1, page_size=10)
|
|
807
|
+
for tx in transactions.results:
|
|
808
|
+
sign = "+" if float(tx.amount_usd) > 0 else ""
|
|
809
|
+
print(f"{tx.transaction_type}: {sign}${tx.amount_usd}")
|
|
810
|
+
print(f"Balance after: ${tx.balance_after}")
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
#### Withdrawals
|
|
814
|
+
|
|
815
|
+
```python
|
|
816
|
+
# Get withdrawal estimate
|
|
817
|
+
estimate = client.payments.get_withdrawal_estimate(
|
|
818
|
+
currency_code="USDTTRC20",
|
|
819
|
+
amount_usd=50.00,
|
|
820
|
+
)
|
|
821
|
+
print(f"Network fee: ${estimate.network_fee_usd}")
|
|
822
|
+
print(f"Final amount: ${estimate.final_amount_usd}")
|
|
823
|
+
|
|
824
|
+
# Create withdrawal request
|
|
825
|
+
result = client.payments.create_withdrawal(
|
|
826
|
+
amount_usd="50.00",
|
|
827
|
+
currency_code="USDTTRC20",
|
|
828
|
+
wallet_address="TYourWalletAddress123",
|
|
829
|
+
)
|
|
830
|
+
if result.success:
|
|
831
|
+
print(f"Withdrawal ID: {result.withdrawal.internal_withdrawal_id}")
|
|
832
|
+
print(f"Status: {result.withdrawal.status}") # pending (requires admin approval)
|
|
833
|
+
|
|
834
|
+
# List withdrawals
|
|
835
|
+
withdrawals = client.payments.list_withdrawals()
|
|
836
|
+
for w in withdrawals.results:
|
|
837
|
+
print(f"{w.internal_withdrawal_id}: ${w.amount_usd} - {w.status}")
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
#### Provider Credentials
|
|
841
|
+
|
|
842
|
+
```python
|
|
843
|
+
# List provider credentials
|
|
844
|
+
credentials = client.payments.list_credentials()
|
|
845
|
+
for cred in credentials.results:
|
|
846
|
+
print(f"{cred.name}: {cred.provider.name}")
|
|
847
|
+
print(f"Total payments: {cred.total_payments}")
|
|
848
|
+
print(f"Total volume: ${cred.total_volume_usd}")
|
|
849
|
+
|
|
850
|
+
# Test credential connection
|
|
851
|
+
test = client.payments.test_credential(cred.id)
|
|
852
|
+
print(f"Connection: {'OK' if test.success else 'Failed'}")
|
|
853
|
+
```
|
|
854
|
+
|
|
855
|
+
#### Payments API Summary
|
|
856
|
+
|
|
857
|
+
| Method | Description |
|
|
858
|
+
|--------|-------------|
|
|
859
|
+
| `get_balance()` | Current balance and totals |
|
|
860
|
+
| `list_currencies()` | Available cryptocurrencies |
|
|
861
|
+
| `get_deposit_estimate(...)` | Estimate crypto amount for USD |
|
|
862
|
+
| `create(...)` | Create payment invoice |
|
|
863
|
+
| `check_status(id)` | Check payment status |
|
|
864
|
+
| `list()` | List all payments |
|
|
865
|
+
| `list_transactions()` | Transaction history |
|
|
866
|
+
| `get_withdrawal_estimate(...)` | Estimate withdrawal fees |
|
|
867
|
+
| `create_withdrawal(...)` | Request withdrawal |
|
|
868
|
+
| `list_withdrawals()` | List withdrawals |
|
|
869
|
+
| `list_credentials()` | Provider credentials |
|
|
870
|
+
| `test_credential(id)` | Test provider connection |
|
|
871
|
+
|
|
872
|
+
### Proxies
|
|
873
|
+
|
|
874
|
+
Manage proxies with rotation, assignments, and health monitoring:
|
|
875
|
+
|
|
876
|
+
```python
|
|
877
|
+
# List all proxies
|
|
878
|
+
proxies = client.proxies.list(page=1, page_size=10)
|
|
879
|
+
for p in proxies.results:
|
|
880
|
+
print(f"{p.host}:{p.port} - {p.country} - {p.status}")
|
|
881
|
+
print(f"Success rate: {p.success_rate}%")
|
|
882
|
+
|
|
883
|
+
# Get healthy proxies (active, good success rate, fast response)
|
|
884
|
+
healthy = client.proxies.get_healthy()
|
|
885
|
+
for p in healthy:
|
|
886
|
+
print(f"{p.host}:{p.port}")
|
|
887
|
+
|
|
888
|
+
# Get Korean proxies
|
|
889
|
+
korean = client.proxies.get_korean()
|
|
890
|
+
|
|
891
|
+
# Get performance statistics
|
|
892
|
+
stats = client.proxies.get_performance_stats()
|
|
893
|
+
print(f"Stats: {stats}")
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
#### Create and Update Proxies
|
|
897
|
+
|
|
898
|
+
```python
|
|
899
|
+
# Create a new proxy
|
|
900
|
+
proxy = client.proxies.create(
|
|
901
|
+
host="192.168.1.100",
|
|
902
|
+
port=8080,
|
|
903
|
+
proxy_type="http", # http, https, socks4, socks5
|
|
904
|
+
proxy_mode="static", # static, rotating, mobile
|
|
905
|
+
country="KR",
|
|
906
|
+
username="user",
|
|
907
|
+
password="pass",
|
|
908
|
+
is_active=True,
|
|
909
|
+
)
|
|
910
|
+
print(f"Created: {proxy.id}")
|
|
911
|
+
|
|
912
|
+
# Update proxy
|
|
913
|
+
updated = client.proxies.update(
|
|
914
|
+
proxy.id,
|
|
915
|
+
status="active",
|
|
916
|
+
max_concurrent_requests=100,
|
|
917
|
+
)
|
|
918
|
+
|
|
919
|
+
# Delete proxy
|
|
920
|
+
client.proxies.delete(proxy.id)
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
#### Rotation Configurations
|
|
924
|
+
|
|
925
|
+
Configure automatic proxy rotation based on criteria:
|
|
926
|
+
|
|
927
|
+
```python
|
|
928
|
+
# List rotation configurations
|
|
929
|
+
rotations = client.proxies.list_rotations()
|
|
930
|
+
for r in rotations.results:
|
|
931
|
+
print(f"{r.name}: {r.allowed_countries}")
|
|
932
|
+
|
|
933
|
+
# Create rotation configuration
|
|
934
|
+
rotation = client.proxies.create_rotation(
|
|
935
|
+
name="Korean Fast Proxies",
|
|
936
|
+
allowed_countries=["KR"],
|
|
937
|
+
min_success_rate=95.0,
|
|
938
|
+
max_response_time_ms=1000,
|
|
939
|
+
rotation_interval_minutes=30,
|
|
940
|
+
is_active=True,
|
|
941
|
+
)
|
|
942
|
+
|
|
943
|
+
# Get available proxies matching rotation criteria
|
|
944
|
+
available = client.proxies.get_available_proxies_for_rotation(rotation.id)
|
|
945
|
+
print(f"Available: {len(available)} proxies")
|
|
946
|
+
|
|
947
|
+
# Update rotation
|
|
948
|
+
client.proxies.update_rotation(rotation.id, is_active=False)
|
|
949
|
+
|
|
950
|
+
# Delete rotation
|
|
951
|
+
client.proxies.delete_rotation(rotation.id)
|
|
952
|
+
```
|
|
953
|
+
|
|
954
|
+
#### Proxy Assignments
|
|
955
|
+
|
|
956
|
+
Track proxy usage by parser:
|
|
957
|
+
|
|
958
|
+
```python
|
|
959
|
+
# List assignments
|
|
960
|
+
assignments = client.proxies.list_assignments()
|
|
961
|
+
for a in assignments.results:
|
|
962
|
+
print(f"{a.parser_id} -> {a.proxy.host}:{a.proxy.port}")
|
|
963
|
+
|
|
964
|
+
# Get active assignments
|
|
965
|
+
active = client.proxies.get_active_assignments()
|
|
966
|
+
|
|
967
|
+
# Create assignment
|
|
968
|
+
assignment = client.proxies.create_assignment(
|
|
969
|
+
proxy=proxy.id,
|
|
970
|
+
parser_id="encar_parser",
|
|
971
|
+
is_active=True,
|
|
972
|
+
priority=5,
|
|
973
|
+
)
|
|
974
|
+
|
|
975
|
+
# Update assignment
|
|
976
|
+
client.proxies.update_assignment(assignment.id, priority=10)
|
|
977
|
+
|
|
978
|
+
# Delete assignment
|
|
979
|
+
client.proxies.delete_assignment(assignment.id)
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
#### Proxy Tests
|
|
983
|
+
|
|
984
|
+
Test proxy connectivity and performance:
|
|
985
|
+
|
|
986
|
+
```python
|
|
987
|
+
# List recent tests
|
|
988
|
+
tests = client.proxies.list_tests()
|
|
989
|
+
for t in tests.results:
|
|
990
|
+
status = "PASS" if t.is_successful else "FAIL"
|
|
991
|
+
print(f"[{status}] {t.proxy.host} - {t.response_time_ms}ms")
|
|
992
|
+
|
|
993
|
+
# Run a test
|
|
994
|
+
test = client.proxies.create_test(
|
|
995
|
+
proxy=proxy.id,
|
|
996
|
+
test_type="connectivity", # connectivity, speed, anonymity, geolocation
|
|
997
|
+
)
|
|
998
|
+
print(f"Test {'passed' if test.is_successful else 'failed'}")
|
|
999
|
+
print(f"Response time: {test.response_time_ms}ms")
|
|
1000
|
+
```
|
|
1001
|
+
|
|
1002
|
+
#### Proxies API Summary
|
|
1003
|
+
|
|
1004
|
+
| Method | Description |
|
|
1005
|
+
|--------|-------------|
|
|
1006
|
+
| `list()` | List all proxies |
|
|
1007
|
+
| `get(id)` | Get proxy details |
|
|
1008
|
+
| `create(...)` | Create new proxy |
|
|
1009
|
+
| `update(id, ...)` | Update proxy |
|
|
1010
|
+
| `delete(id)` | Delete proxy |
|
|
1011
|
+
| `get_healthy()` | Get healthy proxies |
|
|
1012
|
+
| `get_korean()` | Get Korean proxies |
|
|
1013
|
+
| `get_by_country(code)` | Get by country |
|
|
1014
|
+
| `get_performance_stats()` | Overall stats |
|
|
1015
|
+
| `list_rotations()` | List rotation configs |
|
|
1016
|
+
| `create_rotation(...)` | Create rotation |
|
|
1017
|
+
| `update_rotation(id, ...)` | Update rotation |
|
|
1018
|
+
| `delete_rotation(id)` | Delete rotation |
|
|
1019
|
+
| `get_available_proxies_for_rotation(id)` | Matching proxies |
|
|
1020
|
+
| `list_assignments()` | List assignments |
|
|
1021
|
+
| `create_assignment(...)` | Create assignment |
|
|
1022
|
+
| `update_assignment(id, ...)` | Update assignment |
|
|
1023
|
+
| `delete_assignment(id)` | Delete assignment |
|
|
1024
|
+
| `get_active_assignments()` | Active assignments |
|
|
1025
|
+
| `list_tests()` | List tests |
|
|
1026
|
+
| `create_test(...)` | Run proxy test |
|
|
1027
|
+
|
|
753
1028
|
### LLM Models API
|
|
754
1029
|
|
|
755
1030
|
```python
|
|
@@ -943,6 +1218,31 @@ gen.cost_usd # str (decimal)
|
|
|
943
1218
|
gen.duration_ms # int
|
|
944
1219
|
```
|
|
945
1220
|
|
|
1221
|
+
### Helpers
|
|
1222
|
+
|
|
1223
|
+
Re-exported parsing utilities from `sdkrouter_cleaner`:
|
|
1224
|
+
|
|
1225
|
+
```python
|
|
1226
|
+
from sdkrouter import json_to_toon, JsonCleaner, html_to_text, extract_links, extract_images
|
|
1227
|
+
|
|
1228
|
+
# Convert JSON/dict to TOON format
|
|
1229
|
+
toon_str = json_to_toon({"name": "Product", "price": 29.99})
|
|
1230
|
+
|
|
1231
|
+
# Clean and normalize messy JSON strings
|
|
1232
|
+
cleaner = JsonCleaner()
|
|
1233
|
+
cleaned = cleaner.clean(messy_json_string)
|
|
1234
|
+
|
|
1235
|
+
# Extract plain text from HTML
|
|
1236
|
+
text = html_to_text("<p>Hello <b>world</b></p>")
|
|
1237
|
+
# "Hello world"
|
|
1238
|
+
|
|
1239
|
+
# Extract all links from HTML
|
|
1240
|
+
links = extract_links("<a href='/page'>Link</a>", base_url="https://example.com")
|
|
1241
|
+
|
|
1242
|
+
# Extract all image URLs from HTML
|
|
1243
|
+
images = extract_images("<img src='/img.png'>", base_url="https://example.com")
|
|
1244
|
+
```
|
|
1245
|
+
|
|
946
1246
|
## Exports
|
|
947
1247
|
|
|
948
1248
|
```python
|
|
@@ -976,6 +1276,12 @@ from sdkrouter import (
|
|
|
976
1276
|
AudioAnalysisFrame,
|
|
977
1277
|
TranscriptionResponse,
|
|
978
1278
|
VerboseTranscriptionResponse,
|
|
1279
|
+
# Helpers
|
|
1280
|
+
json_to_toon,
|
|
1281
|
+
JsonCleaner,
|
|
1282
|
+
html_to_text,
|
|
1283
|
+
extract_links,
|
|
1284
|
+
extract_images,
|
|
979
1285
|
# And more...
|
|
980
1286
|
)
|
|
981
1287
|
```
|
|
@@ -706,6 +706,284 @@ result = client.embeddings.create(
|
|
|
706
706
|
| `openai/text-embedding-3-large` | 3072 | Higher quality |
|
|
707
707
|
| `openai/text-embedding-ada-002` | 1536 | Legacy |
|
|
708
708
|
|
|
709
|
+
### Payments (Crypto)
|
|
710
|
+
|
|
711
|
+
Accept cryptocurrency payments and manage withdrawals:
|
|
712
|
+
|
|
713
|
+
```python
|
|
714
|
+
# Get current balance
|
|
715
|
+
balance = client.payments.get_balance()
|
|
716
|
+
print(f"Balance: ${balance.balance_usd}")
|
|
717
|
+
print(f"Total deposited: ${balance.total_deposited}")
|
|
718
|
+
|
|
719
|
+
# List available currencies
|
|
720
|
+
currencies = client.payments.list_currencies()
|
|
721
|
+
for c in currencies.results:
|
|
722
|
+
print(f"{c.code}: {c.name} ({c.network})")
|
|
723
|
+
|
|
724
|
+
# Get deposit estimate
|
|
725
|
+
estimate = client.payments.get_deposit_estimate(
|
|
726
|
+
currency_code="USDTTRC20",
|
|
727
|
+
amount_usd=100.00,
|
|
728
|
+
)
|
|
729
|
+
print(f"Crypto amount: {estimate.crypto_amount}")
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
#### Create Payment Invoice
|
|
733
|
+
|
|
734
|
+
```python
|
|
735
|
+
# Create a payment invoice
|
|
736
|
+
result = client.payments.create(
|
|
737
|
+
amount_usd="25.00",
|
|
738
|
+
currency_code="USDTTRC20",
|
|
739
|
+
description="Premium subscription",
|
|
740
|
+
client_reference_id="order_12345",
|
|
741
|
+
)
|
|
742
|
+
|
|
743
|
+
if result.success:
|
|
744
|
+
payment = result.payment
|
|
745
|
+
print(f"Pay {payment.pay_amount} to: {payment.pay_address}")
|
|
746
|
+
print(f"Payment URL: {payment.payment_url}")
|
|
747
|
+
print(f"Expires: {payment.expires_at}")
|
|
748
|
+
|
|
749
|
+
# Check payment status
|
|
750
|
+
status = client.payments.check_status(payment.id, refresh=True)
|
|
751
|
+
print(f"Status: {status.status}")
|
|
752
|
+
if status.transaction_hash:
|
|
753
|
+
print(f"Transaction: {status.transaction_hash}")
|
|
754
|
+
|
|
755
|
+
# List all payments
|
|
756
|
+
payments = client.payments.list(page=1, page_size=10)
|
|
757
|
+
for p in payments.results:
|
|
758
|
+
print(f"{p.internal_payment_id}: ${p.amount_usd} - {p.status}")
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
#### Transaction History
|
|
762
|
+
|
|
763
|
+
```python
|
|
764
|
+
# List transactions
|
|
765
|
+
transactions = client.payments.list_transactions(page=1, page_size=10)
|
|
766
|
+
for tx in transactions.results:
|
|
767
|
+
sign = "+" if float(tx.amount_usd) > 0 else ""
|
|
768
|
+
print(f"{tx.transaction_type}: {sign}${tx.amount_usd}")
|
|
769
|
+
print(f"Balance after: ${tx.balance_after}")
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
#### Withdrawals
|
|
773
|
+
|
|
774
|
+
```python
|
|
775
|
+
# Get withdrawal estimate
|
|
776
|
+
estimate = client.payments.get_withdrawal_estimate(
|
|
777
|
+
currency_code="USDTTRC20",
|
|
778
|
+
amount_usd=50.00,
|
|
779
|
+
)
|
|
780
|
+
print(f"Network fee: ${estimate.network_fee_usd}")
|
|
781
|
+
print(f"Final amount: ${estimate.final_amount_usd}")
|
|
782
|
+
|
|
783
|
+
# Create withdrawal request
|
|
784
|
+
result = client.payments.create_withdrawal(
|
|
785
|
+
amount_usd="50.00",
|
|
786
|
+
currency_code="USDTTRC20",
|
|
787
|
+
wallet_address="TYourWalletAddress123",
|
|
788
|
+
)
|
|
789
|
+
if result.success:
|
|
790
|
+
print(f"Withdrawal ID: {result.withdrawal.internal_withdrawal_id}")
|
|
791
|
+
print(f"Status: {result.withdrawal.status}") # pending (requires admin approval)
|
|
792
|
+
|
|
793
|
+
# List withdrawals
|
|
794
|
+
withdrawals = client.payments.list_withdrawals()
|
|
795
|
+
for w in withdrawals.results:
|
|
796
|
+
print(f"{w.internal_withdrawal_id}: ${w.amount_usd} - {w.status}")
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
#### Provider Credentials
|
|
800
|
+
|
|
801
|
+
```python
|
|
802
|
+
# List provider credentials
|
|
803
|
+
credentials = client.payments.list_credentials()
|
|
804
|
+
for cred in credentials.results:
|
|
805
|
+
print(f"{cred.name}: {cred.provider.name}")
|
|
806
|
+
print(f"Total payments: {cred.total_payments}")
|
|
807
|
+
print(f"Total volume: ${cred.total_volume_usd}")
|
|
808
|
+
|
|
809
|
+
# Test credential connection
|
|
810
|
+
test = client.payments.test_credential(cred.id)
|
|
811
|
+
print(f"Connection: {'OK' if test.success else 'Failed'}")
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
#### Payments API Summary
|
|
815
|
+
|
|
816
|
+
| Method | Description |
|
|
817
|
+
|--------|-------------|
|
|
818
|
+
| `get_balance()` | Current balance and totals |
|
|
819
|
+
| `list_currencies()` | Available cryptocurrencies |
|
|
820
|
+
| `get_deposit_estimate(...)` | Estimate crypto amount for USD |
|
|
821
|
+
| `create(...)` | Create payment invoice |
|
|
822
|
+
| `check_status(id)` | Check payment status |
|
|
823
|
+
| `list()` | List all payments |
|
|
824
|
+
| `list_transactions()` | Transaction history |
|
|
825
|
+
| `get_withdrawal_estimate(...)` | Estimate withdrawal fees |
|
|
826
|
+
| `create_withdrawal(...)` | Request withdrawal |
|
|
827
|
+
| `list_withdrawals()` | List withdrawals |
|
|
828
|
+
| `list_credentials()` | Provider credentials |
|
|
829
|
+
| `test_credential(id)` | Test provider connection |
|
|
830
|
+
|
|
831
|
+
### Proxies
|
|
832
|
+
|
|
833
|
+
Manage proxies with rotation, assignments, and health monitoring:
|
|
834
|
+
|
|
835
|
+
```python
|
|
836
|
+
# List all proxies
|
|
837
|
+
proxies = client.proxies.list(page=1, page_size=10)
|
|
838
|
+
for p in proxies.results:
|
|
839
|
+
print(f"{p.host}:{p.port} - {p.country} - {p.status}")
|
|
840
|
+
print(f"Success rate: {p.success_rate}%")
|
|
841
|
+
|
|
842
|
+
# Get healthy proxies (active, good success rate, fast response)
|
|
843
|
+
healthy = client.proxies.get_healthy()
|
|
844
|
+
for p in healthy:
|
|
845
|
+
print(f"{p.host}:{p.port}")
|
|
846
|
+
|
|
847
|
+
# Get Korean proxies
|
|
848
|
+
korean = client.proxies.get_korean()
|
|
849
|
+
|
|
850
|
+
# Get performance statistics
|
|
851
|
+
stats = client.proxies.get_performance_stats()
|
|
852
|
+
print(f"Stats: {stats}")
|
|
853
|
+
```
|
|
854
|
+
|
|
855
|
+
#### Create and Update Proxies
|
|
856
|
+
|
|
857
|
+
```python
|
|
858
|
+
# Create a new proxy
|
|
859
|
+
proxy = client.proxies.create(
|
|
860
|
+
host="192.168.1.100",
|
|
861
|
+
port=8080,
|
|
862
|
+
proxy_type="http", # http, https, socks4, socks5
|
|
863
|
+
proxy_mode="static", # static, rotating, mobile
|
|
864
|
+
country="KR",
|
|
865
|
+
username="user",
|
|
866
|
+
password="pass",
|
|
867
|
+
is_active=True,
|
|
868
|
+
)
|
|
869
|
+
print(f"Created: {proxy.id}")
|
|
870
|
+
|
|
871
|
+
# Update proxy
|
|
872
|
+
updated = client.proxies.update(
|
|
873
|
+
proxy.id,
|
|
874
|
+
status="active",
|
|
875
|
+
max_concurrent_requests=100,
|
|
876
|
+
)
|
|
877
|
+
|
|
878
|
+
# Delete proxy
|
|
879
|
+
client.proxies.delete(proxy.id)
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
#### Rotation Configurations
|
|
883
|
+
|
|
884
|
+
Configure automatic proxy rotation based on criteria:
|
|
885
|
+
|
|
886
|
+
```python
|
|
887
|
+
# List rotation configurations
|
|
888
|
+
rotations = client.proxies.list_rotations()
|
|
889
|
+
for r in rotations.results:
|
|
890
|
+
print(f"{r.name}: {r.allowed_countries}")
|
|
891
|
+
|
|
892
|
+
# Create rotation configuration
|
|
893
|
+
rotation = client.proxies.create_rotation(
|
|
894
|
+
name="Korean Fast Proxies",
|
|
895
|
+
allowed_countries=["KR"],
|
|
896
|
+
min_success_rate=95.0,
|
|
897
|
+
max_response_time_ms=1000,
|
|
898
|
+
rotation_interval_minutes=30,
|
|
899
|
+
is_active=True,
|
|
900
|
+
)
|
|
901
|
+
|
|
902
|
+
# Get available proxies matching rotation criteria
|
|
903
|
+
available = client.proxies.get_available_proxies_for_rotation(rotation.id)
|
|
904
|
+
print(f"Available: {len(available)} proxies")
|
|
905
|
+
|
|
906
|
+
# Update rotation
|
|
907
|
+
client.proxies.update_rotation(rotation.id, is_active=False)
|
|
908
|
+
|
|
909
|
+
# Delete rotation
|
|
910
|
+
client.proxies.delete_rotation(rotation.id)
|
|
911
|
+
```
|
|
912
|
+
|
|
913
|
+
#### Proxy Assignments
|
|
914
|
+
|
|
915
|
+
Track proxy usage by parser:
|
|
916
|
+
|
|
917
|
+
```python
|
|
918
|
+
# List assignments
|
|
919
|
+
assignments = client.proxies.list_assignments()
|
|
920
|
+
for a in assignments.results:
|
|
921
|
+
print(f"{a.parser_id} -> {a.proxy.host}:{a.proxy.port}")
|
|
922
|
+
|
|
923
|
+
# Get active assignments
|
|
924
|
+
active = client.proxies.get_active_assignments()
|
|
925
|
+
|
|
926
|
+
# Create assignment
|
|
927
|
+
assignment = client.proxies.create_assignment(
|
|
928
|
+
proxy=proxy.id,
|
|
929
|
+
parser_id="encar_parser",
|
|
930
|
+
is_active=True,
|
|
931
|
+
priority=5,
|
|
932
|
+
)
|
|
933
|
+
|
|
934
|
+
# Update assignment
|
|
935
|
+
client.proxies.update_assignment(assignment.id, priority=10)
|
|
936
|
+
|
|
937
|
+
# Delete assignment
|
|
938
|
+
client.proxies.delete_assignment(assignment.id)
|
|
939
|
+
```
|
|
940
|
+
|
|
941
|
+
#### Proxy Tests
|
|
942
|
+
|
|
943
|
+
Test proxy connectivity and performance:
|
|
944
|
+
|
|
945
|
+
```python
|
|
946
|
+
# List recent tests
|
|
947
|
+
tests = client.proxies.list_tests()
|
|
948
|
+
for t in tests.results:
|
|
949
|
+
status = "PASS" if t.is_successful else "FAIL"
|
|
950
|
+
print(f"[{status}] {t.proxy.host} - {t.response_time_ms}ms")
|
|
951
|
+
|
|
952
|
+
# Run a test
|
|
953
|
+
test = client.proxies.create_test(
|
|
954
|
+
proxy=proxy.id,
|
|
955
|
+
test_type="connectivity", # connectivity, speed, anonymity, geolocation
|
|
956
|
+
)
|
|
957
|
+
print(f"Test {'passed' if test.is_successful else 'failed'}")
|
|
958
|
+
print(f"Response time: {test.response_time_ms}ms")
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
#### Proxies API Summary
|
|
962
|
+
|
|
963
|
+
| Method | Description |
|
|
964
|
+
|--------|-------------|
|
|
965
|
+
| `list()` | List all proxies |
|
|
966
|
+
| `get(id)` | Get proxy details |
|
|
967
|
+
| `create(...)` | Create new proxy |
|
|
968
|
+
| `update(id, ...)` | Update proxy |
|
|
969
|
+
| `delete(id)` | Delete proxy |
|
|
970
|
+
| `get_healthy()` | Get healthy proxies |
|
|
971
|
+
| `get_korean()` | Get Korean proxies |
|
|
972
|
+
| `get_by_country(code)` | Get by country |
|
|
973
|
+
| `get_performance_stats()` | Overall stats |
|
|
974
|
+
| `list_rotations()` | List rotation configs |
|
|
975
|
+
| `create_rotation(...)` | Create rotation |
|
|
976
|
+
| `update_rotation(id, ...)` | Update rotation |
|
|
977
|
+
| `delete_rotation(id)` | Delete rotation |
|
|
978
|
+
| `get_available_proxies_for_rotation(id)` | Matching proxies |
|
|
979
|
+
| `list_assignments()` | List assignments |
|
|
980
|
+
| `create_assignment(...)` | Create assignment |
|
|
981
|
+
| `update_assignment(id, ...)` | Update assignment |
|
|
982
|
+
| `delete_assignment(id)` | Delete assignment |
|
|
983
|
+
| `get_active_assignments()` | Active assignments |
|
|
984
|
+
| `list_tests()` | List tests |
|
|
985
|
+
| `create_test(...)` | Run proxy test |
|
|
986
|
+
|
|
709
987
|
### LLM Models API
|
|
710
988
|
|
|
711
989
|
```python
|
|
@@ -899,6 +1177,31 @@ gen.cost_usd # str (decimal)
|
|
|
899
1177
|
gen.duration_ms # int
|
|
900
1178
|
```
|
|
901
1179
|
|
|
1180
|
+
### Helpers
|
|
1181
|
+
|
|
1182
|
+
Re-exported parsing utilities from `sdkrouter_cleaner`:
|
|
1183
|
+
|
|
1184
|
+
```python
|
|
1185
|
+
from sdkrouter import json_to_toon, JsonCleaner, html_to_text, extract_links, extract_images
|
|
1186
|
+
|
|
1187
|
+
# Convert JSON/dict to TOON format
|
|
1188
|
+
toon_str = json_to_toon({"name": "Product", "price": 29.99})
|
|
1189
|
+
|
|
1190
|
+
# Clean and normalize messy JSON strings
|
|
1191
|
+
cleaner = JsonCleaner()
|
|
1192
|
+
cleaned = cleaner.clean(messy_json_string)
|
|
1193
|
+
|
|
1194
|
+
# Extract plain text from HTML
|
|
1195
|
+
text = html_to_text("<p>Hello <b>world</b></p>")
|
|
1196
|
+
# "Hello world"
|
|
1197
|
+
|
|
1198
|
+
# Extract all links from HTML
|
|
1199
|
+
links = extract_links("<a href='/page'>Link</a>", base_url="https://example.com")
|
|
1200
|
+
|
|
1201
|
+
# Extract all image URLs from HTML
|
|
1202
|
+
images = extract_images("<img src='/img.png'>", base_url="https://example.com")
|
|
1203
|
+
```
|
|
1204
|
+
|
|
902
1205
|
## Exports
|
|
903
1206
|
|
|
904
1207
|
```python
|
|
@@ -932,6 +1235,12 @@ from sdkrouter import (
|
|
|
932
1235
|
AudioAnalysisFrame,
|
|
933
1236
|
TranscriptionResponse,
|
|
934
1237
|
VerboseTranscriptionResponse,
|
|
1238
|
+
# Helpers
|
|
1239
|
+
json_to_toon,
|
|
1240
|
+
JsonCleaner,
|
|
1241
|
+
html_to_text,
|
|
1242
|
+
extract_links,
|
|
1243
|
+
extract_images,
|
|
935
1244
|
# And more...
|
|
936
1245
|
)
|
|
937
1246
|
```
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sdkrouter"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.17"
|
|
8
8
|
description = "Unified SDK for AI services with OpenAI compatibility"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -29,13 +29,10 @@ dependencies = [
|
|
|
29
29
|
"httpx>=0.28.0,<1.0.0",
|
|
30
30
|
"pydantic>=2.10.0,<3.0.0",
|
|
31
31
|
"pydantic-settings>=2.7.0",
|
|
32
|
-
"beautifulsoup4>=4.12.0",
|
|
33
|
-
"markdownify>=0.14.0",
|
|
34
32
|
"rich>=14.0.0",
|
|
35
33
|
"tenacity>=9.1.0",
|
|
36
|
-
"toon-python>=0.1.2",
|
|
37
|
-
"lxml>=5.3.0",
|
|
38
34
|
"tiktoken>=0.8.0",
|
|
35
|
+
"sdkrouter-tools>=0.1.0",
|
|
39
36
|
]
|
|
40
37
|
|
|
41
38
|
[project.optional-dependencies]
|