dataiku-api-client 14.7.2__tar.gz → 15.0.0__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 (139) hide show
  1. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/HISTORY.txt +9 -0
  2. {dataiku_api_client-14.7.2/dataiku_api_client.egg-info → dataiku_api_client-15.0.0}/PKG-INFO +11 -2
  3. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0/dataiku_api_client.egg-info}/PKG-INFO +11 -2
  4. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataiku_api_client.egg-info/SOURCES.txt +2 -0
  5. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/admin.py +55 -0
  6. dataiku_api_client-15.0.0/dataikuapi/dss/agent_skill.py +237 -0
  7. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/agent_tool.py +104 -4
  8. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/analysis.py +33 -0
  9. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/apiservice.py +14 -1
  10. dataiku_api_client-15.0.0/dataikuapi/dss/data_collection.py +447 -0
  11. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/dataset.py +53 -8
  12. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/document_extractor.py +25 -4
  13. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/enterprise_asset_library.py +147 -90
  14. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/evaluationstore.py +1 -1
  15. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/knowledgebank.py +11 -1
  16. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/embeddings.py +11 -2
  17. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/llm.py +3 -2
  18. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/llm.py +1268 -32
  19. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/llm_utils/__init__.py +6 -0
  20. dataiku_api_client-15.0.0/dataikuapi/dss/mira.py +226 -0
  21. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/ml.py +278 -18
  22. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/project.py +186 -3
  23. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/retrieval_augmented_llm.py +1 -1
  24. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/savedmodel.py +4 -2
  25. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/scenario.py +2 -1
  26. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/semantic_model.py +11 -0
  27. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dssclient.py +129 -13
  28. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/setup.py +1 -1
  29. dataiku_api_client-14.7.2/dataikuapi/dss/data_collection.py +0 -308
  30. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/LICENSE.txt +0 -0
  31. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/MANIFEST.in +0 -0
  32. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/README +0 -0
  33. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataiku_api_client.egg-info/dependency_links.txt +0 -0
  34. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataiku_api_client.egg-info/requires.txt +0 -0
  35. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataiku_api_client.egg-info/top_level.txt +0 -0
  36. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/__init__.py +0 -0
  37. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/apinode_admin/__init__.py +0 -0
  38. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/apinode_admin/auth.py +0 -0
  39. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/apinode_admin/service.py +0 -0
  40. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/apinode_admin_client.py +0 -0
  41. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/apinode_client.py +0 -0
  42. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/auth.py +0 -0
  43. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/base_client.py +0 -0
  44. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/__init__.py +0 -0
  45. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/agent.py +0 -0
  46. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/agent_review.py +0 -0
  47. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/apideployer.py +0 -0
  48. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/app.py +0 -0
  49. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/businessapp.py +0 -0
  50. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/cobuild.py +0 -0
  51. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/codestudio.py +0 -0
  52. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/continuousactivity.py +0 -0
  53. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/dashboard.py +0 -0
  54. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/data_directories_footprint.py +0 -0
  55. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/data_quality.py +0 -0
  56. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/discussion.py +0 -0
  57. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/drift.py +0 -0
  58. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/evaluationcomparison.py +0 -0
  59. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/feature_store.py +0 -0
  60. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/flow.py +0 -0
  61. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/future.py +0 -0
  62. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/insight.py +0 -0
  63. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/job.py +0 -0
  64. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/jupyternotebook.py +0 -0
  65. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/labeling_task.py +0 -0
  66. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/__init__.py +0 -0
  67. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/knowledge_bank.py +0 -0
  68. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/tool.py +0 -0
  69. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/langchain/utils.py +0 -0
  70. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/llm_tracing/__init__.py +0 -0
  71. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/local_model.py +0 -0
  72. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/macro.py +0 -0
  73. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/managedfolder.py +0 -0
  74. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/meaning.py +0 -0
  75. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/messaging_channel.py +0 -0
  76. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/metrics.py +0 -0
  77. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/mlflow.py +0 -0
  78. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/modelcomparison.py +0 -0
  79. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/modelevaluationstore.py +0 -0
  80. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/notebook.py +0 -0
  81. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/plugin.py +0 -0
  82. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/project_standards.py +0 -0
  83. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/projectdeployer.py +0 -0
  84. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/projectfolder.py +0 -0
  85. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/projectlibrary.py +0 -0
  86. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/recipe.py +0 -0
  87. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/sqlnotebook.py +0 -0
  88. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/sqlquery.py +0 -0
  89. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/statistics.py +0 -0
  90. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/streaming_endpoint.py +0 -0
  91. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/tools/__init__.py +0 -0
  92. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/tools/codegen.py +0 -0
  93. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/tools/langchain.py +0 -0
  94. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/unifiedmonitoring.py +0 -0
  95. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/utils.py +0 -0
  96. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/webapp.py +0 -0
  97. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/wiki.py +0 -0
  98. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss/workspace.py +0 -0
  99. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss_plugin_mlflow/__init__.py +0 -0
  100. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss_plugin_mlflow/artifact_repository.py +0 -0
  101. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss_plugin_mlflow/header_provider.py +0 -0
  102. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/dss_plugin_mlflow/utils.py +0 -0
  103. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/__init__.py +0 -0
  104. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/cloudaccounts.py +0 -0
  105. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/future.py +0 -0
  106. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/instances.py +0 -0
  107. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/instancesettingstemplates.py +0 -0
  108. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/loadbalancers.py +0 -0
  109. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/tenant.py +0 -0
  110. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fm/virtualnetworks.py +0 -0
  111. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/fmclient.py +0 -0
  112. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/__init__.py +0 -0
  113. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/admin.py +0 -0
  114. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/admin_blueprint_designer.py +0 -0
  115. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/admin_custom_pages_handler.py +0 -0
  116. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/admin_roles_permissions_handler.py +0 -0
  117. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/artifact.py +0 -0
  118. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/artifact_search.py +0 -0
  119. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/blueprint.py +0 -0
  120. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/custom_page.py +0 -0
  121. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/future.py +0 -0
  122. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/time_series.py +0 -0
  123. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/uploaded_file.py +0 -0
  124. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern/users_container.py +0 -0
  125. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/govern_client.py +0 -0
  126. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/iam/__init__.py +0 -0
  127. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/iam/settings.py +0 -0
  128. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/__init__.py +0 -0
  129. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/exceptions.py +0 -0
  130. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/group.py +0 -0
  131. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/node.py +0 -0
  132. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/profile.py +0 -0
  133. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/response.py +0 -0
  134. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/task.py +0 -0
  135. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad/user.py +0 -0
  136. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/launchpad_client.py +0 -0
  137. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/dataikuapi/utils.py +0 -0
  138. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/requirements.txt +0 -0
  139. {dataiku_api_client-14.7.2 → dataiku_api_client-15.0.0}/setup.cfg +0 -0
@@ -1,6 +1,15 @@
1
1
  Changelog
2
2
  ==========
3
3
 
4
+ 15.0.0 (2026-08-14)
5
+ -------------------
6
+
7
+ * Initial release for DSS 15.0.0
8
+
9
+ 14.7.3 (2026-08-03)
10
+ -------------------
11
+
12
+ * Initial release for DSS 14.7.3
4
13
 
5
14
  14.7.2 (2026-07-13)
6
15
  -------------------
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.2
3
+ Version: 15.0.0
4
4
  Summary: Python API client for Dataiku APIs
5
5
  Home-page: https://www.dataiku.com
6
- Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.7.2
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.0.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -35,6 +35,15 @@ https://doc.dataiku.com/dss/latest/python-api/rest-api-client/index.html
35
35
  Changelog
36
36
  ==========
37
37
 
38
+ 15.0.0 (2026-08-14)
39
+ -------------------
40
+
41
+ * Initial release for DSS 15.0.0
42
+
43
+ 14.7.3 (2026-08-03)
44
+ -------------------
45
+
46
+ * Initial release for DSS 14.7.3
38
47
 
39
48
  14.7.2 (2026-07-13)
40
49
  -------------------
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.2
3
+ Version: 15.0.0
4
4
  Summary: Python API client for Dataiku APIs
5
5
  Home-page: https://www.dataiku.com
6
- Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.7.2
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.0.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -35,6 +35,15 @@ https://doc.dataiku.com/dss/latest/python-api/rest-api-client/index.html
35
35
  Changelog
36
36
  ==========
37
37
 
38
+ 15.0.0 (2026-08-14)
39
+ -------------------
40
+
41
+ * Initial release for DSS 15.0.0
42
+
43
+ 14.7.3 (2026-08-03)
44
+ -------------------
45
+
46
+ * Initial release for DSS 14.7.3
38
47
 
39
48
  14.7.2 (2026-07-13)
40
49
  -------------------
@@ -26,6 +26,7 @@ dataikuapi/dss/__init__.py
26
26
  dataikuapi/dss/admin.py
27
27
  dataikuapi/dss/agent.py
28
28
  dataikuapi/dss/agent_review.py
29
+ dataikuapi/dss/agent_skill.py
29
30
  dataikuapi/dss/agent_tool.py
30
31
  dataikuapi/dss/analysis.py
31
32
  dataikuapi/dss/apideployer.py
@@ -61,6 +62,7 @@ dataikuapi/dss/managedfolder.py
61
62
  dataikuapi/dss/meaning.py
62
63
  dataikuapi/dss/messaging_channel.py
63
64
  dataikuapi/dss/metrics.py
65
+ dataikuapi/dss/mira.py
64
66
  dataikuapi/dss/ml.py
65
67
  dataikuapi/dss/mlflow.py
66
68
  dataikuapi/dss/modelcomparison.py
@@ -4,6 +4,8 @@ import json
4
4
  import warnings
5
5
  import logging
6
6
  from datetime import datetime
7
+
8
+ from .utils import DSSInfoMessages
7
9
  from ..utils import _timestamp_ms_to_zoned_datetime
8
10
 
9
11
  logger = logging.getLogger("dataikuapi.dss.admin")
@@ -2208,6 +2210,7 @@ class DSSCodeEnvContainerConfsBearer(object):
2208
2210
  * SYSTEM_LEVEL_CUDA_122_CUDNN_897
2209
2211
  * CUDA_SUPPORT_FOR_TORCH2_WITH_PYPI_NVIDIA_PACKAGES
2210
2212
  * BASIC_GPU_ENABLING
2213
+ * HUGGING_FACE_LOCAL_CPU
2211
2214
  * PYTHON36_SUPPORT
2212
2215
  * PYTHON37_SUPPORT
2213
2216
  * PYTHON38_SUPPORT
@@ -3305,6 +3308,58 @@ class DSSCodeStudioTemplate(object):
3305
3308
  params={"withNoCache": disable_docker_cache})
3306
3309
  return DSSFuture(self.client, future_response.get('jobId', None), future_response)
3307
3310
 
3311
+ def get_export_stream(self):
3312
+ """
3313
+ Export the template as a zip archive.
3314
+
3315
+ :returns: the exported archive as a stream
3316
+ :rtype: file-like object
3317
+ """
3318
+ return self.client._perform_raw(
3319
+ "GET", "/admin/code-studios/%s/export" % (self.template_id)
3320
+ ).raw
3321
+
3322
+ def export_to_file(self, path):
3323
+ """
3324
+ Export the template to a file.
3325
+
3326
+ This produces a zip file with the template's definition and its resources, if any. The zip can be imported with
3327
+ :meth:`dataikuapi.DSSClient.import_code_studio_template`
3328
+
3329
+ :param str path: the destination file path
3330
+ """
3331
+ with open(path, 'wb') as f:
3332
+ export_stream = self.client._perform_raw(
3333
+ "GET", "/admin/code-studios/%s/export" % (self.template_id)
3334
+ )
3335
+ for chunk in export_stream.iter_content(chunk_size=32768):
3336
+ if chunk:
3337
+ f.write(chunk)
3338
+ f.flush()
3339
+
3340
+ ########################################################
3341
+ # Template deletion
3342
+ ########################################################
3343
+
3344
+ def delete(self, delete_runtime=False, delete_images=False):
3345
+ """
3346
+ Delete the template.
3347
+
3348
+ :param bool delete_runtime: if True, also delete the Code Studio runtimes created from this template
3349
+ :param bool delete_images: if True, also delete the Docker images and build folders associated with this template
3350
+
3351
+ :return: backend info/warning/error messages about the deletion
3352
+ :rtype: dict
3353
+ """
3354
+ resp = self.client._perform_json(
3355
+ "DELETE",
3356
+ "/admin/code-studios/%s" % (self.template_id),
3357
+ params={
3358
+ "deleteRuntime": delete_runtime,
3359
+ "deleteImages": delete_images
3360
+ })
3361
+ return DSSInfoMessages(resp)
3362
+
3308
3363
  class DSSCodeStudioTemplateSettings(object):
3309
3364
  """
3310
3365
  The settings of a code studio template
@@ -0,0 +1,237 @@
1
+ from requests import utils
2
+
3
+ from .utils import DSSTaggableObjectListItem, DSSTaggableObjectSettings
4
+
5
+
6
+ class DSSAgentSkillListItem(DSSTaggableObjectListItem):
7
+ """
8
+ .. important::
9
+ Do not instantiate this class directly, instead use :meth:`dataikuapi.dss.project.DSSProject.list_agent_skills`.
10
+ """
11
+
12
+ def __init__(self, client, project_key, data):
13
+ super(DSSAgentSkillListItem, self).__init__(data)
14
+ self.client = client
15
+ self.project_key = data.get("projectKey", project_key)
16
+
17
+ def to_agent_skill(self):
18
+ """
19
+ Convert the current item.
20
+
21
+ :rtype: :class:`dataikuapi.dss.agent_skill.DSSAgentSkill`
22
+ """
23
+ return DSSAgentSkill(self.client, self.project_key, self._data["id"])
24
+
25
+ @property
26
+ def id(self):
27
+ """
28
+ :returns: The id of the skill.
29
+ :rtype: string
30
+ """
31
+ return self._data["id"]
32
+
33
+ @property
34
+ def name(self):
35
+ """
36
+ :returns: The name of the skill.
37
+ :rtype: string
38
+ """
39
+ return self._data.get("name")
40
+
41
+
42
+ class DSSAgentSkill(object):
43
+ """
44
+ .. important::
45
+ Do not instantiate this class directly, instead use :meth:`dataikuapi.dss.project.DSSProject.get_agent_skill`.
46
+ """
47
+
48
+ def __init__(self, client, project_key, skill_id):
49
+ self.client = client
50
+ self.project_key = project_key
51
+ self.skill_id = skill_id
52
+
53
+ @property
54
+ def id(self):
55
+ """
56
+ :returns: The id of the skill.
57
+ :rtype: string
58
+ """
59
+ return self.skill_id
60
+
61
+ def get_settings(self):
62
+ """
63
+ Get the DSS metadata settings of the agent skill.
64
+
65
+ The parsed ``SKILL.md`` fields are available through
66
+ :meth:`get_skill_content` and the raw file through :meth:`get_file`.
67
+
68
+ :return: a handle on the skill settings
69
+ :rtype: :class:`dataikuapi.dss.agent_skill.DSSAgentSkillSettings`
70
+ """
71
+ settings = self.client._perform_json(
72
+ "GET",
73
+ "/projects/%s/agents/skills/%s" % (self.project_key, self.id),
74
+ )
75
+ return DSSAgentSkillSettings(self, settings)
76
+
77
+ def get_skill_content(self):
78
+ """
79
+ Get the parsed contents of ``SKILL.md``.
80
+
81
+ :returns: A dictionary containing ``name``, ``description``,
82
+ ``metadata``, and ``instructions``.
83
+ :rtype: dict
84
+ """
85
+ return self.client._perform_json(
86
+ "GET",
87
+ "/projects/%s/agents/skills/%s/content"
88
+ % (self.project_key, self.id),
89
+ )
90
+
91
+ def delete(self):
92
+ """
93
+ Delete the agent skill.
94
+ """
95
+ return self.client._perform_empty("DELETE", "/projects/%s/agents/skills/%s" % (self.project_key, self.id))
96
+
97
+ def list_resources(self):
98
+ """
99
+ List the files and folders attached to this skill as a recursive tree.
100
+
101
+ :rtype: list[dict]
102
+ """
103
+ return self.client._perform_json(
104
+ "GET",
105
+ "/projects/%s/agents/skills/%s/resources/contents" % (self.project_key, self.id),
106
+ )
107
+
108
+ def get_file(self, path):
109
+ """
110
+ Get a file's contents.
111
+
112
+ :param str path: Root-relative path of the file to download
113
+ :rtype: :class:`requests.models.Response`
114
+ """
115
+ return self.client._perform_raw(
116
+ "GET",
117
+ "/projects/%s/agents/skills/%s/resources/contents/%s"
118
+ % (self.project_key, self.id, utils.quote(path)),
119
+ )
120
+
121
+ def get_file_details(self, path):
122
+ """
123
+ Get a file's metadata without its content.
124
+
125
+ :param str path: Root-relative path of the file
126
+ :rtype: dict
127
+ """
128
+ return self.client._perform_json(
129
+ "GET",
130
+ "/projects/%s/agents/skills/%s/resources/details/%s"
131
+ % (self.project_key, self.id, utils.quote(path)),
132
+ )
133
+
134
+ def put_file(self, path, data):
135
+ """
136
+ Create or overwrite a file.
137
+
138
+ Strings are encoded as UTF-8 and bytes are stored unchanged. Parent
139
+ folders must already exist. Replacing the root ``SKILL.md`` validates
140
+ the supplied content and rejects an invalid skill file.
141
+
142
+ :param str path: Root-relative path of the file
143
+ :param data: String, bytes, or file-like content
144
+ :rtype: dict
145
+ """
146
+ if isinstance(data, str):
147
+ data = data.encode("utf-8")
148
+ elif not isinstance(data, bytes) and not hasattr(data, "read"):
149
+ raise TypeError("data must be a string, bytes, or file-like object")
150
+ return self.client._perform_json(
151
+ "PUT",
152
+ "/projects/%s/agents/skills/%s/resources/contents/%s"
153
+ % (self.project_key, self.id, utils.quote(path)),
154
+ files={"file": (path.rsplit("/", 1)[-1], data)},
155
+ )
156
+
157
+ def rename_resource(self, path, new_name):
158
+ """
159
+ Rename a resource.
160
+
161
+ :param str path: Root-relative path of the existing resource
162
+ :param str new_name: New file name, without a folder path
163
+ :rtype: str
164
+ """
165
+ return self.client._perform_raw(
166
+ "POST",
167
+ "/projects/%s/agents/skills/%s/resources/contents-actions/rename"
168
+ % (self.project_key, self.id),
169
+ body={"oldPath": path, "newName": new_name},
170
+ ).text
171
+
172
+ def move_resource(self, path, new_path):
173
+ """
174
+ Move a resource to a destination folder.
175
+
176
+ :param str path: Root-relative path of the existing resource
177
+ :param str new_path: Root-relative path of the destination folder, or an empty string for the skill root
178
+ :rtype: str
179
+ """
180
+ return self.client._perform_raw(
181
+ "POST",
182
+ "/projects/%s/agents/skills/%s/resources/contents-actions/move"
183
+ % (self.project_key, self.id),
184
+ body={"oldPath": path, "newPath": new_path},
185
+ ).text
186
+
187
+ def create_folder(self, path):
188
+ """
189
+ Create a resource folder in the skill.
190
+
191
+ Missing parent folders are created as needed.
192
+
193
+ :param str path: Root-relative path of the folder to create
194
+ """
195
+ return self.client._perform_empty(
196
+ "POST",
197
+ "/projects/%s/agents/skills/%s/resources/folders/%s"
198
+ % (self.project_key, self.id, utils.quote(path)),
199
+ )
200
+
201
+ def delete_resource(self, path):
202
+ """
203
+ Delete a resource from the skill.
204
+
205
+ :param str path: Root-relative path of the resource to delete
206
+ """
207
+ return self.client._perform_empty(
208
+ "DELETE",
209
+ "/projects/%s/agents/skills/%s/resources/contents/%s"
210
+ % (self.project_key, self.id, utils.quote(path)),
211
+ )
212
+
213
+ class DSSAgentSkillSettings(DSSTaggableObjectSettings):
214
+ def __init__(self, agent_skill, settings):
215
+ super(DSSAgentSkillSettings, self).__init__(settings)
216
+ self.agent_skill = agent_skill
217
+
218
+ def get_raw(self):
219
+ """
220
+ Get the raw settings of the skill.
221
+
222
+ :rtype: dict
223
+ """
224
+ return self._tod
225
+
226
+ def save(self):
227
+ """
228
+ Saves the DSS metadata settings of the agent skill.
229
+
230
+ This does not modify ``SKILL.md``. Use :meth:`DSSAgentSkill.put_file`
231
+ to replace the skill file.
232
+ """
233
+ self.agent_skill.client._perform_empty(
234
+ "PUT",
235
+ "/projects/%s/agents/skills/%s" % (self.agent_skill.project_key, self.agent_skill.id),
236
+ body=self._tod,
237
+ )
@@ -1,7 +1,8 @@
1
+ import hashlib
2
+ import json
1
3
  from .utils import DSSTaggableObjectListItem, DSSTaggableObjectSettings, AnyLoc
2
4
  from .knowledgebank import DSSKnowledgeBank, DSSKnowledgeBankListItem
3
5
  from .llm_tracing import prepare_query_for_nested_llm_mesh_call
4
- import json
5
6
 
6
7
  class DSSAgentToolListItem(DSSTaggableObjectListItem):
7
8
  """
@@ -55,6 +56,7 @@ class DSSAgentTool(object):
55
56
  self.project_key = project_key
56
57
  self.tool_id = tool_id
57
58
  self._descriptor = descriptor
59
+ self._subtool_mapping = {}
58
60
 
59
61
  @property
60
62
  def id(self):
@@ -64,7 +66,7 @@ class DSSAgentTool(object):
64
66
  """
65
67
  return self.tool_id
66
68
 
67
- def get_descriptor(self):
69
+ def get_descriptor(self, context=None):
68
70
  """
69
71
  Get the descriptor of the tool
70
72
 
@@ -73,7 +75,10 @@ class DSSAgentTool(object):
73
75
  """
74
76
 
75
77
  if self._descriptor is None:
76
- self._descriptor = self.client._perform_json("GET", "/projects/%s/agents/tools/%s/descriptor" % (self.project_key, self.tool_id))
78
+ if context is None:
79
+ self._descriptor = self.client._perform_json("GET", "/projects/%s/agents/tools/%s/descriptor" % (self.project_key, self.tool_id))
80
+ else:
81
+ self._descriptor = self.client._perform_json("POST", "/projects/%s/agents/tools/%s/descriptor" % (self.project_key, self.tool_id), body={"context": context})
77
82
  return self._descriptor
78
83
 
79
84
  def get_settings(self):
@@ -105,11 +110,106 @@ class DSSAgentTool(object):
105
110
  from dataikuapi.dss.langchain.tool import convert_to_langchain_structured_tool
106
111
  return convert_to_langchain_structured_tool(self, context)
107
112
 
113
+ @staticmethod
114
+ def _compute_spec_hash(tool_ref, additional_description, subtool_name=None):
115
+ additional_description = (additional_description or "").strip()
116
+ subtool_name = (subtool_name or "").strip()
117
+ fields = [tool_ref, additional_description, subtool_name]
118
+ serialized_fields = json.dumps(fields, sort_keys=True, ensure_ascii=True)
119
+ return hashlib.sha256(serialized_fields.encode("utf-8")).hexdigest()[:6]
120
+
121
+ @staticmethod
122
+ def _get_function_tool_descriptor_parts(
123
+ tool_descriptor,
124
+ spec_hash,
125
+ additional_description,
126
+ subtool_descriptor=None,
127
+ ):
128
+
129
+ name = "{}__{}".format(tool_descriptor['name'], spec_hash)
130
+
131
+ if subtool_descriptor:
132
+ description = subtool_descriptor.get("description", "")
133
+ parameters = subtool_descriptor["inputSchema"]
134
+ name += "__" + subtool_descriptor["name"]
135
+ else:
136
+ description = tool_descriptor.get("description", "")
137
+ parameters = tool_descriptor["inputSchema"]
138
+
139
+ if additional_description:
140
+ description = "{}\n\n{}".format(description, additional_description).strip()
141
+
142
+ return (
143
+ name,
144
+ description,
145
+ parameters,
146
+ )
147
+
148
+ @staticmethod
149
+ def _build_function_tool_descriptor(name, description, parameters):
150
+ return {
151
+ "type": "function",
152
+ "function": {
153
+ "name": name,
154
+ "description": description,
155
+ "parameters": parameters,
156
+ }
157
+ }
158
+
159
+ def _as_llm_mesh_tool(self):
160
+ tool_descriptor = self.get_descriptor()
161
+ if type(self._descriptor) is not dict:
162
+ raise Exception("Invalid descriptor type: expected `dict`, got %s" % type(self._descriptor))
163
+ settings = self.get_settings().get_raw()
164
+ additional_description = settings.get("additionalDescriptionForLLM") or ""
165
+ result = []
166
+ if tool_descriptor.get("multiple"):
167
+ for subtool in tool_descriptor.get("subtools", []):
168
+ if not subtool.get("enabled"):
169
+ continue
170
+ subtool_spec_hash = self._compute_spec_hash(
171
+ self.tool_id,
172
+ additional_description,
173
+ subtool.get("name"),
174
+ )
175
+ name, description, parameters = self._get_function_tool_descriptor_parts(
176
+ tool_descriptor,
177
+ subtool_spec_hash,
178
+ additional_description,
179
+ subtool_descriptor=subtool,
180
+ )
181
+ self._subtool_mapping[name] = subtool.get("name")
182
+ result.append(self._build_function_tool_descriptor(
183
+ name=name,
184
+ description=description,
185
+ parameters=parameters,
186
+ ))
187
+ else:
188
+ computed_spec_hash = self._compute_spec_hash(
189
+ self.tool_id,
190
+ additional_description,
191
+ )
192
+ name, description, parameters = self._get_function_tool_descriptor_parts(
193
+ tool_descriptor,
194
+ computed_spec_hash,
195
+ additional_description,
196
+ )
197
+ result.append(self._build_function_tool_descriptor(
198
+ name=name,
199
+ description=description,
200
+ parameters=parameters,
201
+ ))
202
+
203
+ return result
204
+
205
+ def _get_subtool_name(self, tool_name):
206
+ return self._subtool_mapping.get(tool_name)
207
+
108
208
  def run(self, input, context=None, subtool_name=None, memory_fragment=None, tool_validation_responses=None, tool_validation_requests=None):
109
209
  """
110
210
  Execute a tool call
111
211
 
112
- :param str input: Text input
212
+ :param dict input: Input for the tool
113
213
  :param dict context: Additional request context
114
214
  :param str subtool_name: Name of the sub-tool, if applicable (e.g., for a MCP tool)
115
215
  :rtype: dict
@@ -258,6 +258,39 @@ class DSSAnalysis(object):
258
258
  mltask.wait_guess_complete()
259
259
  return mltask
260
260
 
261
+ def create_multi_target_prediction_ml_task(self,
262
+ target_variables,
263
+ guess_policy="MULTI_TARGET_DEFAULT",
264
+ wait_guess_complete=True):
265
+ """Creates a new multi-target regression task in this visual analysis lab for a dataset.
266
+
267
+ :param list target_variables: List of target variables to predict
268
+ :param string guess_policy: Policy to use for setting the default parameters.
269
+ Valid values are: MULTI_TARGET_DEFAULT
270
+ :param boolean wait_guess_complete: If False, the returned ML task will be in 'guessing' state, i.e. analyzing the input dataset to determine feature handling and algorithms.
271
+ You should wait for the guessing to be completed by calling
272
+ ``wait_guess_complete`` on the returned object before doing anything
273
+ else (in particular calling ``train`` or ``get_settings``)
274
+ :return :class dataiku.dss.ml.DSSMLTask
275
+ """
276
+ obj = {
277
+ "taskType": "PREDICTION",
278
+ "targetVariables": target_variables,
279
+ "backendType": "PY_MEMORY",
280
+ "guessPolicy": guess_policy,
281
+ "predictionType": "MULTI_TARGET_REGRESSION"
282
+ }
283
+ ref = self.client._perform_json(
284
+ "POST",
285
+ "/projects/{project_key}/lab/{analysis_id}/models/".format(project_key=self.project_key, analysis_id=self.analysis_id),
286
+ body=obj
287
+ )
288
+ mltask = DSSMLTask(self.client, self.project_key, self.analysis_id, ref["mlTaskId"])
289
+
290
+ if wait_guess_complete:
291
+ mltask.wait_guess_complete()
292
+ return mltask
293
+
261
294
  def create_causal_prediction_ml_task(self,
262
295
  outcome_variable,
263
296
  treatment_variable,
@@ -116,7 +116,7 @@ class DSSAPIServiceSettings(object):
116
116
  :return: ist of endpoints, each one a dict. Endpoint have different fields depending on their type, but always have at least:
117
117
 
118
118
  * **id** : identifier of the endpoint
119
- * **type** : type of endpoint. Possible values: STD_PREDICTION, STD_CLUSTERING, STD_FORECAST, STD_CAUSAL_PREDICTION, CUSTOM_PREDICTION, CUSTOM_R_PREDICTION, R_FUNCTION, PY_FUNCTION, DATASETS_LOOKUP, SQL_QUERY
119
+ * **type** : type of endpoint. Possible values: STD_PREDICTION, STD_CLUSTERING, STD_FORECAST, STD_CAUSAL_PREDICTION, STD_MULTITARGET_PREDICTION, CUSTOM_PREDICTION, CUSTOM_R_PREDICTION, R_FUNCTION, PY_FUNCTION, DATASETS_LOOKUP, SQL_QUERY
120
120
 
121
121
  :rtype: list[dict]
122
122
  """
@@ -135,6 +135,19 @@ class DSSAPIServiceSettings(object):
135
135
  "modelRef": saved_model_id
136
136
  })
137
137
 
138
+ def add_multitarget_prediction_endpoint(self, endpoint_id, saved_model_id):
139
+ """
140
+ Add a new "visual multi-target prediction" endpoint to this API service.
141
+
142
+ :param string endpoint_id: identifier of the new endpoint to create
143
+ :param string saved_model_id: identifier of the saved model (that is currently deployed to the Flow) to use
144
+ """
145
+ self.settings["endpoints"].append({
146
+ "id" : endpoint_id,
147
+ "type" : "STD_MULTITARGET_PREDICTION",
148
+ "modelRef": saved_model_id
149
+ })
150
+
138
151
  def add_clustering_endpoint(self, endpoint_id, saved_model_id):
139
152
  """
140
153
  Add a new "visual clustering" endpoint to this API service.