craft-ai-sdk 0.68.3rc1__tar.gz → 0.71.0rc1__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.
Files changed (35) hide show
  1. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/PKG-INFO +11 -12
  2. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/README.md +1 -1
  3. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/__init__.py +1 -1
  4. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/deployments.py +10 -3
  5. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/pipelines.py +2 -0
  6. craft_ai_sdk-0.71.0rc1/craft_ai_sdk/py.typed +0 -0
  7. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/sdk.py +1 -1
  8. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/helpers.py +8 -0
  9. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/documentation.pdf +0 -0
  10. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/pyproject.toml +40 -31
  11. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/LICENSE +0 -0
  12. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/constants.py +0 -0
  13. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/data_store.py +0 -0
  14. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/endpoints.py +0 -0
  15. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/environment_variables.py +0 -0
  16. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/pipeline_executions.py +0 -0
  17. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/pipeline_metrics.py +0 -0
  18. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/pipeline_templates.py +0 -0
  19. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/resource_metrics.py +0 -0
  20. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/steps.py +0 -0
  21. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/users.py +0 -0
  22. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/core/vector_database.py +0 -0
  23. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/exceptions.py +0 -0
  24. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/io.py +0 -0
  25. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/authentication.py +0 -0
  26. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/environments.py +0 -0
  27. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/execution_context.py +0 -0
  28. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/logger.py +0 -0
  29. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/request_response_handler.py +0 -0
  30. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/types.py +0 -0
  31. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/shared/warnings.py +0 -0
  32. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/utils/__init__.py +0 -0
  33. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/utils/datetime_utils.py +0 -0
  34. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/utils/dict_utils.py +0 -0
  35. {craft_ai_sdk-0.68.3rc1 → craft_ai_sdk-0.71.0rc1}/craft_ai_sdk/utils/file_utils.py +0 -0
@@ -1,23 +1,22 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: craft-ai-sdk
3
- Version: 0.68.3rc1
3
+ Version: 0.71.0rc1
4
4
  Summary: Craft AI MLOps platform SDK
5
- License: Apache-2.0
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
6
7
  Author: Craft AI
7
8
  Author-email: contact@craft.ai
8
- Requires-Python: >=3.9,<4.0
9
- Classifier: License :: OSI Approved :: Apache Software License
9
+ Requires-Python: >=3.10
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.9
12
11
  Classifier: Programming Language :: Python :: 3.10
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
15
14
  Classifier: Programming Language :: Python :: 3.13
16
- Requires-Dist: PyJWT (>=2.3.0,<3.0.0)
17
- Requires-Dist: StrEnum (>=0.4.9,<0.5.0)
18
- Requires-Dist: requests (>=2.27.1,<3.0.0)
19
- Requires-Dist: weaviate-client (>=4.10.4,<5.0.0)
20
- Project-URL: Homepage, https://www.craft.ai/
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Dist: StrEnum (>=0.4.9)
17
+ Requires-Dist: pyjwt (>=2.4.0)
18
+ Requires-Dist: requests (>=2.32.4)
19
+ Requires-Dist: weaviate-client (>=4.15.3)
21
20
  Description-Content-Type: text/markdown
22
21
 
23
22
  # Craft AI Python SDK
@@ -25,7 +24,7 @@ Description-Content-Type: text/markdown
25
24
  This Python SDK lets you interact with Craft AI MLOps Platform.
26
25
 
27
26
  ## Installation
28
- This project relies on **Python 3.9+**. Once a supported version of Python is installed, you can install `craft-ai-sdk` from PyPI with:
27
+ This project relies on **Python 3.10+**. Once a supported version of Python is installed, you can install `craft-ai-sdk` from PyPI with:
29
28
 
30
29
  ```console
31
30
  pip install craft-ai-sdk
@@ -3,7 +3,7 @@
3
3
  This Python SDK lets you interact with Craft AI MLOps Platform.
4
4
 
5
5
  ## Installation
6
- This project relies on **Python 3.9+**. Once a supported version of Python is installed, you can install `craft-ai-sdk` from PyPI with:
6
+ This project relies on **Python 3.10+**. Once a supported version of Python is installed, you can install `craft-ai-sdk` from PyPI with:
7
7
 
8
8
  ```console
9
9
  pip install craft-ai-sdk
@@ -13,4 +13,4 @@ from .io import ( # noqa: F401
13
13
  )
14
14
  from .sdk import CraftAiSdk # noqa: F401
15
15
 
16
- __version__ = "0.68.3rc1"
16
+ __version__ = "0.71.0rc1"
@@ -236,9 +236,16 @@ def create_deployment(
236
236
  deployment. This is only available for "low_latency" deployments mode.
237
237
  wait_for_completion (:obj:`bool`, optional): Whether to wait for the deployment
238
238
  to be ready. Defaults to ``True``.
239
- timeout_s (:obj:`int`): Maximum time (in seconds) to wait for the deployment to
240
- be ready. Set to None to wait indefinitely. Defaults to None.
241
- Only applicable if ``wait_for_completion`` is ``True``.
239
+ timeout_s (:obj:`int`): The execution timeout parameter defines how long code
240
+ can run before it is automatically stopped.
241
+ Parallel mode:
242
+ Async code: The timeout works correctly, if the execution exceeds the limit,
243
+ the task is canceled.
244
+ Non-async code: The timeout is applied, but the running thread is not
245
+ forcibly stopped, which may delay termination.
246
+ Queue mode:
247
+ Async code: The execution is canceled on timeout.
248
+ Non-async code: No timeout is applied (runs in the main thread).
242
249
  endpoint_token (:obj:`str`, optional): Applicable only if ``execution_rule``
243
250
  is ``"endpoint"``. The token to access the endpoint. If not set, a token
244
251
  will be generated. This token is different from the SDK token, you can find it
@@ -474,6 +474,7 @@ def get_pipeline(
474
474
  the pipeline.
475
475
  """
476
476
  base_url = f"{sdk.base_environment_api_url}/pipelines/{pipeline_name}"
477
+ log_action(sdk, f'Get pipeline: "{pipeline_name}", "{wait_for_completion}".')
477
478
  if wait_for_completion:
478
479
  pipeline = wait_create_until_ready(
479
480
  sdk,
@@ -487,6 +488,7 @@ def get_pipeline(
487
488
  )
488
489
  else:
489
490
  pipeline = sdk._get(base_url)
491
+ log_action(sdk, "Get pipeline done.")
490
492
 
491
493
  latest_execution = sdk._get(
492
494
  f"{sdk.base_environment_api_url}/pipelines/{pipeline_name}/executions/latest"
File without changes
@@ -143,7 +143,7 @@ class CraftAiSdk(BaseCraftAiSdk):
143
143
  )
144
144
  # Default timeout of proxy network components
145
145
  _access_token_margin = timedelta(seconds=120)
146
- _version = "0.68.3rc1" # Would be better to share it somewhere
146
+ _version = "0.71.0rc1" # Would be better to share it somewhere
147
147
 
148
148
  def __init__(
149
149
  self,
@@ -1,15 +1,23 @@
1
1
  from craft_ai_sdk.exceptions import SdkException
2
+ from craft_ai_sdk.shared.logger import log_action
2
3
 
3
4
 
4
5
  def wait_create_until_ready(sdk, name, get_func, timeout_s, start_time, get_log_func):
5
6
  elapsed_time = sdk._get_time() - start_time
6
7
  status = "creation_pending"
8
+ log_action(sdk, f'Start waiting for "{name}" to be created.')
7
9
  while status == "creation_pending" and (
8
10
  timeout_s is None or elapsed_time < timeout_s
9
11
  ):
10
12
  created_obj = get_func(sdk, name)
11
13
  status = created_obj.get("creation_info", {}).get("status", None)
12
14
  elapsed_time = sdk._get_time() - start_time
15
+ log_action(
16
+ sdk,
17
+ f'Still waiting for "{name}" to be created, \
18
+ status="{status}", elapsed time={elapsed_time}s.',
19
+ )
20
+ log_action(sdk, f'End waiting for "{name}" to be created, status="{status}".')
13
21
 
14
22
  if status == "creation_failed":
15
23
  raise SdkException(
@@ -1,15 +1,20 @@
1
- [tool.poetry]
1
+ [project]
2
2
  name = "craft-ai-sdk"
3
- version = "0.68.3rc1"
4
3
  description = "Craft AI MLOps platform SDK"
5
- license = "Apache-2.0"
6
- authors = ["Craft AI <contact@craft.ai>"]
4
+ authors = [{name = "Craft AI", email = "contact@craft.ai"}]
7
5
  readme = "README.md"
8
6
  homepage = "https://www.craft.ai/"
9
- packages = [{ include = "craft_ai_sdk" }]
10
- include = ["documentation.pdf"]
7
+ license = "Apache-2.0"
8
+ version = "0.71.0rc1"
9
+ requires-python = ">=3.10"
10
+ dependencies = [
11
+ "requests >= 2.32.4",
12
+ "pyjwt >= 2.4.0",
13
+ "StrEnum >= 0.4.9",
14
+ "weaviate-client >= 4.15.3",
15
+ ]
11
16
 
12
- [tool.poetry.scripts]
17
+ [project.scripts]
13
18
  lint = "scripts.scripts:lint"
14
19
  lintfix = "scripts.scripts:lintfix"
15
20
  format = "scripts.scripts:format"
@@ -22,33 +27,37 @@ set-version = "scripts.scripts:set_version"
22
27
  pdfdoc = "scripts.scripts:generate_docs_in_pdf"
23
28
  rstdoc = "scripts.scripts:generate_docs_in_rst"
24
29
 
25
- [tool.pytest.ini_options]
26
- filterwarnings = ["ignore::UserWarning"]
30
+ [dependency-groups]
31
+ dev = [
32
+ "ipython < 8.31", # >= 8.31.0 dropped support for python 3.10
33
+ "ipykernel >= 7.1.0",
34
+ "pylint >= 4.0.3",
35
+ "python-dotenv >= 1.2.1",
36
+ "pytest >= 9.0.1",
37
+ "pytest-asyncio >= 1.3.0",
38
+ "requests-mock[fixture] >= 1.12.1",
39
+ "pytest-watch >= 4.2.0",
40
+ "pyarrow >= 22.0.0",
41
+ "pandas >= 2.3.3",
42
+ "ruff >= 0.14.6",
43
+ ]
44
+ docs = [
45
+ "doc8 >= 2.0.0",
46
+ "Sphinx < 8.2.0", # >= 8.2.0 dropped support for python 3.10
47
+ "sphinxcontrib-restbuilder >= 0.3",
48
+ ]
27
49
 
28
- [tool.poetry.dependencies]
29
- python = "^3.9"
30
- requests = "^2.27.1"
31
- PyJWT = "^2.3.0"
32
- StrEnum = "^0.4.9"
33
- weaviate-client = "^4.10.4"
50
+ [tool.poetry]
51
+ version = "0.71.0rc1"
52
+ packages = [{ include = "craft_ai_sdk" }]
53
+ include = ["documentation.pdf"]
54
+ requires-poetry = ">=2.2.1"
34
55
 
35
- [tool.poetry.group.dev.dependencies]
36
- ipython = "^8.18.1"
37
- ipykernel = "^6.29.5"
38
- pylint = "^3.3.7"
39
- python-dotenv = "^1.0.1"
40
- pytest = "^8.3.4"
41
- pytest-asyncio = "^1.2.0"
42
- requests-mock = { extras = ["fixture"], version = "^1.9.3" }
43
- pytest-watch = "^4.2.0"
44
- pyarrow = "^19.0.1"
45
- pandas = "^2.2.3"
46
- ruff = "^0.12.2"
56
+ [tool.poetry.group.docs]
57
+ optional = true
47
58
 
48
- [tool.poetry.group.docs.dependencies]
49
- doc8 = "^0.10.1"
50
- Sphinx = "^5.0.1"
51
- sphinxcontrib-restbuilder = "^0.3"
59
+ [tool.pytest.ini_options]
60
+ filterwarnings = ["ignore::UserWarning"]
52
61
 
53
62
  [tool.ruff.lint]
54
63
  extend-select = ["B", "C", "E", "F", "I", "T", "W"]