dataiku-api-client 14.4.4__tar.gz → 14.5.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 (137) hide show
  1. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/HISTORY.txt +6 -0
  2. {dataiku_api_client-14.4.4/dataiku_api_client.egg-info → dataiku_api_client-14.5.0}/PKG-INFO +8 -2
  3. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0/dataiku_api_client.egg-info}/PKG-INFO +8 -2
  4. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataiku_api_client.egg-info/SOURCES.txt +2 -0
  5. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/admin.py +30 -2
  6. dataiku_api_client-14.5.0/dataikuapi/dss/agent.py +565 -0
  7. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/agent_tool.py +5 -3
  8. dataiku_api_client-14.5.0/dataikuapi/dss/enterprise_asset_library.py +205 -0
  9. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/knowledgebank.py +17 -3
  10. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/knowledge_bank.py +1 -0
  11. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/llm.py +177 -16
  12. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/llm_tracing/__init__.py +10 -0
  13. dataiku_api_client-14.5.0/dataikuapi/dss/llm_utils/__init__.py +280 -0
  14. dataiku_api_client-14.5.0/dataikuapi/dss/local_model.py +232 -0
  15. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/ml.py +1 -1
  16. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/mlflow.py +22 -10
  17. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/project.py +32 -8
  18. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/recipe.py +5 -0
  19. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/sqlnotebook.py +1 -3
  20. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/utils.py +1 -1
  21. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss_plugin_mlflow/artifact_repository.py +15 -2
  22. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/setup.py +2 -2
  23. dataiku_api_client-14.4.4/dataikuapi/dss/agent.py +0 -237
  24. dataiku_api_client-14.4.4/dataikuapi/dss/enterprise_asset_library.py +0 -33
  25. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/LICENSE.txt +0 -0
  26. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/MANIFEST.in +0 -0
  27. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/README +0 -0
  28. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataiku_api_client.egg-info/dependency_links.txt +0 -0
  29. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataiku_api_client.egg-info/requires.txt +0 -0
  30. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataiku_api_client.egg-info/top_level.txt +0 -0
  31. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/__init__.py +0 -0
  32. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/apinode_admin/__init__.py +0 -0
  33. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/apinode_admin/auth.py +0 -0
  34. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/apinode_admin/service.py +0 -0
  35. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/apinode_admin_client.py +0 -0
  36. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/apinode_client.py +0 -0
  37. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/auth.py +0 -0
  38. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/base_client.py +0 -0
  39. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/__init__.py +0 -0
  40. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/agent_review.py +0 -0
  41. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/analysis.py +0 -0
  42. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/apideployer.py +0 -0
  43. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/apiservice.py +0 -0
  44. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/app.py +0 -0
  45. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/businessapp.py +0 -0
  46. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/codestudio.py +0 -0
  47. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/continuousactivity.py +0 -0
  48. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/dashboard.py +0 -0
  49. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/data_collection.py +0 -0
  50. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/data_directories_footprint.py +0 -0
  51. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/data_quality.py +0 -0
  52. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/dataset.py +0 -0
  53. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/discussion.py +0 -0
  54. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/document_extractor.py +0 -0
  55. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/drift.py +0 -0
  56. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/evaluationcomparison.py +0 -0
  57. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/evaluationstore.py +0 -0
  58. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/feature_store.py +0 -0
  59. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/flow.py +0 -0
  60. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/future.py +0 -0
  61. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/insight.py +0 -0
  62. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/job.py +0 -0
  63. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/jupyternotebook.py +0 -0
  64. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/labeling_task.py +0 -0
  65. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/__init__.py +0 -0
  66. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/embeddings.py +0 -0
  67. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/llm.py +0 -0
  68. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/tool.py +0 -0
  69. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/langchain/utils.py +0 -0
  70. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/macro.py +0 -0
  71. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/managedfolder.py +0 -0
  72. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/meaning.py +0 -0
  73. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/messaging_channel.py +0 -0
  74. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/metrics.py +0 -0
  75. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/modelcomparison.py +0 -0
  76. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/modelevaluationstore.py +0 -0
  77. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/notebook.py +0 -0
  78. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/plugin.py +0 -0
  79. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/project_standards.py +0 -0
  80. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/projectdeployer.py +0 -0
  81. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/projectfolder.py +0 -0
  82. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/projectlibrary.py +0 -0
  83. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/retrieval_augmented_llm.py +0 -0
  84. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/savedmodel.py +0 -0
  85. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/scenario.py +0 -0
  86. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/semantic_model.py +0 -0
  87. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/sqlquery.py +0 -0
  88. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/statistics.py +0 -0
  89. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/streaming_endpoint.py +0 -0
  90. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/tools/__init__.py +0 -0
  91. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/tools/codegen.py +0 -0
  92. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/tools/langchain.py +0 -0
  93. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/unifiedmonitoring.py +0 -0
  94. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/webapp.py +0 -0
  95. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/wiki.py +0 -0
  96. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss/workspace.py +0 -0
  97. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss_plugin_mlflow/__init__.py +0 -0
  98. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss_plugin_mlflow/header_provider.py +0 -0
  99. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dss_plugin_mlflow/utils.py +0 -0
  100. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/dssclient.py +0 -0
  101. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/__init__.py +0 -0
  102. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/cloudaccounts.py +0 -0
  103. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/future.py +0 -0
  104. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/instances.py +0 -0
  105. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/instancesettingstemplates.py +0 -0
  106. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/loadbalancers.py +0 -0
  107. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/tenant.py +0 -0
  108. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fm/virtualnetworks.py +0 -0
  109. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/fmclient.py +0 -0
  110. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/__init__.py +0 -0
  111. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/admin.py +0 -0
  112. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/admin_blueprint_designer.py +0 -0
  113. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/admin_custom_pages_handler.py +0 -0
  114. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/admin_roles_permissions_handler.py +0 -0
  115. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/artifact.py +0 -0
  116. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/artifact_search.py +0 -0
  117. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/blueprint.py +0 -0
  118. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/custom_page.py +0 -0
  119. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/future.py +0 -0
  120. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/time_series.py +0 -0
  121. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/uploaded_file.py +0 -0
  122. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern/users_container.py +0 -0
  123. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/govern_client.py +0 -0
  124. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/iam/__init__.py +0 -0
  125. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/iam/settings.py +0 -0
  126. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/__init__.py +0 -0
  127. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/exceptions.py +0 -0
  128. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/group.py +0 -0
  129. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/node.py +0 -0
  130. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/profile.py +0 -0
  131. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/response.py +0 -0
  132. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/task.py +0 -0
  133. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad/user.py +0 -0
  134. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/launchpad_client.py +0 -0
  135. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/dataikuapi/utils.py +0 -0
  136. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/requirements.txt +0 -0
  137. {dataiku_api_client-14.4.4 → dataiku_api_client-14.5.0}/setup.cfg +0 -0
@@ -2,6 +2,12 @@ Changelog
2
2
  ==========
3
3
 
4
4
 
5
+
6
+ 14.5.0 (2026-04-16)
7
+ -------------------
8
+
9
+ * Initial release for DSS 14.5.0
10
+
5
11
  14.4.4 (2026-04-15)
6
12
  -------------------
7
13
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.4.4
3
+ Version: 14.5.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.4.4
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.5.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,12 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+
40
+ 14.5.0 (2026-04-16)
41
+ -------------------
42
+
43
+ * Initial release for DSS 14.5.0
44
+
39
45
  14.4.4 (2026-04-15)
40
46
  -------------------
41
47
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.4.4
3
+ Version: 14.5.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.4.4
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.5.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,12 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+
40
+ 14.5.0 (2026-04-16)
41
+ -------------------
42
+
43
+ * Initial release for DSS 14.5.0
44
+
39
45
  14.4.4 (2026-04-15)
40
46
  -------------------
41
47
 
@@ -54,6 +54,7 @@ dataikuapi/dss/jupyternotebook.py
54
54
  dataikuapi/dss/knowledgebank.py
55
55
  dataikuapi/dss/labeling_task.py
56
56
  dataikuapi/dss/llm.py
57
+ dataikuapi/dss/local_model.py
57
58
  dataikuapi/dss/macro.py
58
59
  dataikuapi/dss/managedfolder.py
59
60
  dataikuapi/dss/meaning.py
@@ -91,6 +92,7 @@ dataikuapi/dss/langchain/llm.py
91
92
  dataikuapi/dss/langchain/tool.py
92
93
  dataikuapi/dss/langchain/utils.py
93
94
  dataikuapi/dss/llm_tracing/__init__.py
95
+ dataikuapi/dss/llm_utils/__init__.py
94
96
  dataikuapi/dss/tools/__init__.py
95
97
  dataikuapi/dss/tools/codegen.py
96
98
  dataikuapi/dss/tools/langchain.py
@@ -1,4 +1,5 @@
1
1
  from .future import DSSFuture
2
+ from .local_model import DSSLocalModel
2
3
  import json
3
4
  import warnings
4
5
  import logging
@@ -267,7 +268,35 @@ class DSSConnection(object):
267
268
  return self.client._perform_json(
268
269
  "PUT", "/admin/connections/%s" % self.name,
269
270
  body = definition)
270
-
271
+
272
+
273
+ def list_local_models(self):
274
+ """
275
+ :returns: List local models defined in this connection.
276
+ :rtype: list[:class:`~dataikuapi.dss.local_model.DSSLocalModel`]
277
+ :raises Exception: If this connection is not of type HuggingFaceLocal.
278
+ """
279
+ definition = self.get_definition()
280
+ if definition.get("type") != "HuggingFaceLocal":
281
+ raise Exception("Connection %s is not a HuggingFaceLocal connection" % self.name)
282
+ params = definition.get("params") or {}
283
+ models = params.get("models") or []
284
+ return [DSSLocalModel(self.client, self.name, model.get("id")) for model in models]
285
+
286
+ def get_local_model(self, model_id):
287
+ """
288
+ Get a handle on this local model.
289
+
290
+ :param str model_id: Identifier of the model.
291
+ :rtype: :class:`~dataikuapi.dss.local_model.DSSLocalModel`
292
+ """
293
+ if not model_id.strip():
294
+ raise ValueError("model_id must be a non-empty string")
295
+ if not self.name.strip():
296
+ raise ValueError("connection_name must be a non-empty string")
297
+
298
+ return DSSLocalModel(self.client, self.name, model_id)
299
+
271
300
  ########################################################
272
301
  # Security
273
302
  ########################################################
@@ -3361,4 +3390,3 @@ class DSSLLMCostLimitingCounters(object):
3361
3390
  :rtype: dict
3362
3391
  """
3363
3392
  return next((counter for counter in self.counters if counter["id"] == id), None)
3364
-
@@ -0,0 +1,565 @@
1
+ from .agent_tool import DSSAgentTool, DSSAgentToolListItem
2
+ from .utils import DSSTaggableObjectListItem, DSSTaggableObjectSettings
3
+
4
+
5
+ class DSSAgentInteractionLoggingSettings(object):
6
+ """
7
+ Settings for agent interaction logging.
8
+
9
+ .. important::
10
+
11
+ Do not instantiate this class directly, use :attr:`dataikuapi.dss.agent.DSSAgentInteractionLoggingSelection.settings` instead.
12
+ """
13
+
14
+ CONTENT_MODE_FULL = "FULL"
15
+ CONTENT_MODE_NO_LOGS = "NO_LOGS"
16
+ CONTENT_MODE_NO_LOGS_NO_TRACE = "NO_LOGS_NO_TRACE"
17
+
18
+ _VALID_CONTENT_MODES = (
19
+ CONTENT_MODE_FULL,
20
+ CONTENT_MODE_NO_LOGS,
21
+ CONTENT_MODE_NO_LOGS_NO_TRACE,
22
+ )
23
+
24
+ def __init__(self, settings):
25
+ self._settings = settings
26
+
27
+ def get_raw(self):
28
+ """
29
+ Returns the raw interaction logging settings.
30
+
31
+ :rtype: dict
32
+ """
33
+ return self._settings
34
+
35
+ def get(self, key, default=None):
36
+ return self._settings.get(key, default)
37
+
38
+ def __getitem__(self, key):
39
+ return self._settings[key]
40
+
41
+ def __setitem__(self, key, value):
42
+ if key == "writeAsUser":
43
+ raise ValueError("writeAsUser is read-only")
44
+ self._settings[key] = value
45
+
46
+ @property
47
+ def dataset_name(self):
48
+ """
49
+ The dataset name used for interaction logging.
50
+
51
+ :rtype: str | None
52
+ """
53
+ return self._settings.get("datasetName")
54
+
55
+ @dataset_name.setter
56
+ def dataset_name(self, value):
57
+ self._settings["datasetName"] = value
58
+
59
+ @property
60
+ def write_as_user(self):
61
+ """
62
+ The DSS user used to write logs.
63
+
64
+ This value is read-only and is set automatically to the user who saves
65
+ the agent settings.
66
+
67
+ :rtype: str | None
68
+ """
69
+ return self._settings.get("writeAsUser")
70
+
71
+ @property
72
+ def flush_every_s(self):
73
+ """
74
+ The flush interval, in seconds.
75
+
76
+ :rtype: int | None
77
+ """
78
+ return self._settings.get("flushEveryS")
79
+
80
+ @flush_every_s.setter
81
+ def flush_every_s(self, value):
82
+ self._settings["flushEveryS"] = value
83
+
84
+ @property
85
+ def flush_every_bytes(self):
86
+ """
87
+ The maximum buffered payload size before a flush.
88
+
89
+ :rtype: int | None
90
+ """
91
+ return self._settings.get("flushEveryBytes")
92
+
93
+ @flush_every_bytes.setter
94
+ def flush_every_bytes(self, value):
95
+ self._settings["flushEveryBytes"] = value
96
+
97
+ @property
98
+ def content_mode(self):
99
+ """
100
+ The content logging mode.
101
+
102
+ :rtype: str | None
103
+ """
104
+ return self._settings.get("contentMode")
105
+
106
+ @content_mode.setter
107
+ def content_mode(self, value):
108
+ if value not in self._VALID_CONTENT_MODES:
109
+ raise ValueError("Invalid content mode: %s" % value)
110
+ self._settings["contentMode"] = value
111
+
112
+
113
+ class DSSAgentInteractionLoggingSelection(object):
114
+ """
115
+ Selection for agent interaction logging.
116
+
117
+ .. important::
118
+
119
+ Do not instantiate this class directly, use :attr:`dataikuapi.dss.agent.DSSAgentVersionSettings.interaction_logging_selection` instead.
120
+ """
121
+
122
+ MODE_INHERIT = "INHERIT"
123
+ MODE_EXPLICIT = "EXPLICIT"
124
+ MODE_NONE = "NONE"
125
+
126
+ _VALID_MODES = (
127
+ MODE_INHERIT,
128
+ MODE_EXPLICIT,
129
+ MODE_NONE,
130
+ )
131
+
132
+ def __init__(self, selection):
133
+ self._selection = selection
134
+
135
+ def get_raw(self):
136
+ """
137
+ Returns the raw interaction logging selection.
138
+
139
+ :rtype: dict
140
+ """
141
+ return self._selection
142
+
143
+ def get(self, key, default=None):
144
+ return self._selection.get(key, default)
145
+
146
+ def __getitem__(self, key):
147
+ return self._selection[key]
148
+
149
+ def __setitem__(self, key, value):
150
+ self._selection[key] = value
151
+
152
+ def _get_or_create_settings_raw(self):
153
+ settings = self._selection.get("explicitSettings")
154
+ if settings is None:
155
+ settings = {}
156
+ self._selection["explicitSettings"] = settings
157
+ return settings
158
+
159
+ @property
160
+ def mode(self):
161
+ """
162
+ The interaction logging mode. One of INHERIT, EXPLICIT or NONE.
163
+
164
+ In ``INHERIT`` mode, settings are inherited from the project-level
165
+ configuration.
166
+
167
+ :rtype: str | None
168
+ """
169
+ return self._selection.get("mode")
170
+
171
+ @mode.setter
172
+ def mode(self, value):
173
+ if value not in self._VALID_MODES:
174
+ raise ValueError("Invalid interaction logging mode: %s" % value)
175
+ self._selection["mode"] = value
176
+
177
+ @property
178
+ def settings(self):
179
+ """
180
+ The explicit interaction logging settings.
181
+
182
+ These settings are only used when the selection is in ``EXPLICIT`` mode.
183
+
184
+ :rtype: :class:`dataikuapi.dss.agent.DSSAgentInteractionLoggingSettings`
185
+ """
186
+ return DSSAgentInteractionLoggingSettings(self._get_or_create_settings_raw())
187
+
188
+ @settings.setter
189
+ def settings(self, value):
190
+ if isinstance(value, DSSAgentInteractionLoggingSettings):
191
+ value = value.get_raw()
192
+ if value is None:
193
+ value = {}
194
+ self._selection["explicitSettings"] = value
195
+
196
+ def enable(self, dataset_name, settings=None):
197
+ """
198
+ Enable interaction logging on this agent version with explicit settings.
199
+
200
+ This only controls the agent version setting itself. Interaction logging
201
+ can still be effectively unavailable if it is disabled at the instance level.
202
+
203
+ :param dataset_name: Dataset name used for interaction logging.
204
+ :type dataset_name: str
205
+ :param settings: Optional explicit settings payload or
206
+ :class:`dataikuapi.dss.agent.DSSAgentInteractionLoggingSettings`.
207
+ :type settings: dict | :class:`dataikuapi.dss.agent.DSSAgentInteractionLoggingSettings` | None
208
+ """
209
+ self.mode = self.MODE_EXPLICIT
210
+ if settings is not None:
211
+ self.settings = settings
212
+ self.settings.dataset_name = dataset_name
213
+
214
+ def inherit(self):
215
+ """
216
+ Enable interaction logging on this agent version in inherited mode.
217
+
218
+ In this mode, the version inherits the project-level interaction logging settings.
219
+ """
220
+ self.mode = self.MODE_INHERIT
221
+
222
+ def disable(self):
223
+ """
224
+ Disable interaction logging on this agent version.
225
+ """
226
+ self.mode = self.MODE_NONE
227
+
228
+
229
+ class DSSAgentListItem(DSSTaggableObjectListItem):
230
+ """
231
+ An item in a list of agents
232
+
233
+ .. important::
234
+ Do not instantiate this class directly, instead use :meth:`dataikuapi.dss.project.DSSProject.list_agents`.
235
+ """
236
+ def __init__(self, client, data):
237
+ super(DSSAgentListItem, self).__init__(data)
238
+ self.client = client
239
+
240
+
241
+ @property
242
+ def project_key(self):
243
+ """
244
+ :returns: The project
245
+ :rtype: string
246
+ """
247
+ return self._data["projectKey"]
248
+
249
+ @property
250
+ def id(self):
251
+ """
252
+ :returns: The id of the agent.
253
+ :rtype: string
254
+ """
255
+ return self._data["id"]
256
+
257
+ @property
258
+ def name(self):
259
+ """
260
+ :returns: The name of the agent.
261
+ :rtype: string
262
+ """
263
+ return self._data["name"]
264
+
265
+ def as_llm(self):
266
+ """Returns this agent as a usable :class:`dataikuapi.dss.llm.DSSLLM` for querying"""
267
+ return self.client.get_project(self.project_key).get_llm("agent:%s" % self.id)
268
+
269
+
270
+ class DSSAgent(object):
271
+ """
272
+ A handle to interact with a DSS-managed agent.
273
+
274
+ .. important::
275
+
276
+ Do not create this class directly, use :meth:`dataikuapi.dss.project.DSSProject.get_agent` instead.
277
+ """
278
+ def __init__(self, client, project_key, id):
279
+ self.client = client
280
+ self.project_key = project_key
281
+ self._id = id
282
+
283
+ @property
284
+ def id(self):
285
+ return self._id
286
+
287
+ def as_llm(self):
288
+ """Returns this agent as a usable :class:`dataikuapi.dss.llm.DSSLLM` for querying"""
289
+ return self.client.get_project(self.project_key).get_llm("agent:%s" % self.id)
290
+
291
+ def get_settings(self):
292
+ """
293
+ Get the agent's definition
294
+
295
+ :return: a handle on the agent definition
296
+ :rtype: :class:`dataikuapi.dss.agent.DSSAgentSettings`
297
+ """
298
+ settings = self.client._perform_json(
299
+ "GET", "/projects/%s/agents/%s" % (self.project_key, self.id))
300
+ return DSSAgentSettings(self.client, settings)
301
+
302
+ def delete(self):
303
+ """
304
+ Delete the agent
305
+ """
306
+ return self.client._perform_empty("DELETE", "/projects/%s/agents/%s" % (self.project_key, self.id))
307
+
308
+ def shutdown(self, version_id=None, force=False):
309
+ """
310
+ Shutdown all instances of the given version of this agent
311
+
312
+ :param version_id: If unspecified, uses the active version.
313
+ :type version_id: str | None
314
+ :param force: If True, cancel requests being processed and stop the instances. If False, let those active requests complete before stopping.
315
+ :type force: bool
316
+ """
317
+ return self.client._perform_empty(
318
+ "POST", "/projects/%s/agents/%s/actions/shutdown" % (self.project_key, self.id), body={
319
+ "versionId": version_id,
320
+ "force": force
321
+ })
322
+
323
+ def status(self, version_id=None):
324
+ """
325
+ Query status of instances of the given version of this agent
326
+
327
+ :param version_id: If unspecified, uses the active version.
328
+ :type version_id: str | None
329
+ :return: A dict holding the list of the status for each instance.
330
+ """
331
+ return self.client._perform_json(
332
+ "GET", "/projects/%s/agents/%s/status" % (self.project_key, self.id), body={
333
+ "versionId": version_id
334
+ })
335
+
336
+ def wake_up(self, version_id=None):
337
+ """
338
+ Start an instance of an agent if none is started
339
+
340
+ :param version_id: If unspecified, uses the active version.
341
+ :type version_id: str | None
342
+ """
343
+ return self.client._perform_empty(
344
+ "POST", "/projects/%s/agents/%s/actions/wakeup" % (self.project_key, self.id), body={
345
+ "versionId": version_id
346
+ })
347
+
348
+
349
+ class DSSAgentSettings(DSSTaggableObjectSettings):
350
+ """
351
+ Settings for a agent
352
+
353
+ .. important::
354
+
355
+ Do not instantiate directly, use :meth:`dataikuapi.dss.agent.DSSAgent.get_settings` instead
356
+
357
+ """
358
+
359
+ def __init__(self, client, settings):
360
+ super(DSSAgentSettings, self).__init__(settings)
361
+ self._client = client
362
+ self._settings = settings
363
+
364
+ def get_version_ids(self):
365
+ return [v["versionId"] for v in self._settings["versions"]]
366
+
367
+ @property
368
+ def active_version(self):
369
+ """Returns the active version of this agent. May return None if no version is declared as active"""
370
+ return self._settings.get("activeVersion")
371
+
372
+ def get_version_settings(self, version_id):
373
+
374
+ version_settings = None
375
+ for vs in self._settings["versions"]:
376
+ if vs["versionId"] == version_id:
377
+ version_settings = vs
378
+ break
379
+ if version_settings is None:
380
+ raise Exception("version %s not found" % version_id)
381
+
382
+ return DSSAgentVersionSettings(self, version_settings)
383
+
384
+ @property
385
+ def type(self):
386
+ return self._settings["type"]
387
+
388
+ def get_raw(self):
389
+ """
390
+ Returns the raw settings of the agent
391
+ :return: the raw settings of the agent
392
+ :rtype: dict
393
+ """
394
+ return self._settings
395
+
396
+ def save(self):
397
+ """
398
+ Saves the settings for this agent
399
+ """
400
+ self._client._perform_empty(
401
+ "PUT", "/projects/%s/agents/%s" % (self._settings["projectKey"], self._settings["id"]), body=self._settings)
402
+
403
+ class DSSAgentVersionSettings(object):
404
+ def __init__(self, settings, version_settings):
405
+ self._agent_settings = settings
406
+ self._version_settings = version_settings
407
+
408
+ def get_raw(self):
409
+ return self._version_settings
410
+
411
+ @property
412
+ def llm_id(self):
413
+ """
414
+ Only for Visual Agents
415
+ :rtype: :class:`str`
416
+ """
417
+ if not self._agent_settings.type == "TOOLS_USING_AGENT":
418
+ raise ValueError("Only valid for Simple Visual Agents")
419
+ return self._version_settings["toolsUsingAgentSettings"]["llmId"]
420
+
421
+ @llm_id.setter
422
+ def llm_id(self, value):
423
+ if not self._agent_settings.type == "TOOLS_USING_AGENT":
424
+ raise ValueError("Only valid for Simple Visual Agents")
425
+ self._version_settings["toolsUsingAgentSettings"]["llmId"] = value
426
+
427
+ @property
428
+ def tools(self):
429
+ """
430
+ Returns the list of tools of the agent. The list can be modified.
431
+
432
+ Each tool is a dict, containing at least "toolRef", which is the identifier of the tool.
433
+ The dict may also contain "additionalDescription" which is added to the description of the tool
434
+ """
435
+ if not self._agent_settings.type == "TOOLS_USING_AGENT":
436
+ raise ValueError("Only valid for Simple Visual Agents")
437
+ return self._version_settings["toolsUsingAgentSettings"]["tools"]
438
+
439
+ def add_tool(self, tool):
440
+ """
441
+ Adds a tool to the agent
442
+
443
+ :param tool: a string (identifier of the tool), or a :class:`dataikuapi.dss.agent_tool.DSSAgentTool`
444
+ """
445
+
446
+ def get_tool_ref():
447
+ is_foreign = self._agent_settings._settings["projectKey"] != tool.project_key
448
+ if is_foreign:
449
+ return tool.project_key + "." + tool.id
450
+ else:
451
+ return tool.id
452
+
453
+ if isinstance(tool, DSSAgentToolListItem):
454
+ tool_dict = { "toolRef" : get_tool_ref()}
455
+ elif isinstance(tool, DSSAgentTool):
456
+ tool_dict = { "toolRef" : get_tool_ref()}
457
+ elif isinstance(tool, str):
458
+ tool_dict = { "toolRef" : tool}
459
+ else:
460
+ raise Exception("Cannot add agent tool: %s" % tool)
461
+
462
+ self.tools.append(tool_dict)
463
+
464
+ def _get_internal_agent_settings(self):
465
+ """
466
+ Returns internal agent settings (SavedModel#AgentSettings in Java) matching the agent type.
467
+
468
+ :rtype: dict
469
+ """
470
+ settings_key_by_type = {
471
+ "TOOLS_USING_AGENT": "toolsUsingAgentSettings",
472
+ "STRUCTURED_AGENT": "structuredAgentSettings",
473
+ "PYTHON_AGENT": "pythonAgentSettings",
474
+ "PLUGIN_AGENT": "pluginAgentSettings",
475
+ }
476
+
477
+ try:
478
+ settings_key = settings_key_by_type[self._agent_settings.type]
479
+ return self._version_settings[settings_key]
480
+ except KeyError:
481
+ raise ValueError("Unsupported agent type: %s" % self._agent_settings.type)
482
+
483
+ def _get_or_create_interaction_logging_selection(self):
484
+ internal_settings = self._get_internal_agent_settings()
485
+ interaction_logging_selection = internal_settings.get("interactionLoggingSelection")
486
+ if interaction_logging_selection is None:
487
+ interaction_logging_selection = {
488
+ "mode": DSSAgentInteractionLoggingSelection.MODE_INHERIT,
489
+ "explicitSettings": {},
490
+ }
491
+ internal_settings["interactionLoggingSelection"] = interaction_logging_selection
492
+ return interaction_logging_selection
493
+
494
+ @property
495
+ def interaction_logging_selection(self):
496
+ """
497
+ Get the interaction logging selection for this version.
498
+
499
+ Before configuring interaction logging on an agent version, create the
500
+ target dataset on the project:
501
+
502
+ .. code-block:: python
503
+
504
+ project = client.get_project("MYPROJECT")
505
+ project.create_agent_interaction_logging_dataset(
506
+ "agent_logs",
507
+ connection_id="filesystem_managed",
508
+ time_partitioning="DAY",
509
+ )
510
+
511
+ Example using inherited settings:
512
+
513
+ .. code-block:: python
514
+
515
+ agent = project.get_agent("my_agent")
516
+ agent_settings = agent.get_settings()
517
+ version_settings = agent_settings.get_version_settings("v1")
518
+
519
+ agent_logging_selection = version_settings.interaction_logging_selection
520
+ agent_logging_selection.inherit()
521
+
522
+ agent_settings.save()
523
+
524
+ Example using explicit settings:
525
+
526
+ .. code-block:: python
527
+
528
+ agent = project.get_agent("my_agent")
529
+ agent_settings = agent.get_settings()
530
+ version_settings = agent_settings.get_version_settings("v1")
531
+
532
+ agent_logging_selection = version_settings.interaction_logging_selection
533
+ agent_logging_selection.enable(
534
+ "agent_logs",
535
+ settings={
536
+ "flushEveryS": 60,
537
+ "flushEveryBytes": 1_000_000,
538
+ "contentMode": "FULL",
539
+ },
540
+ )
541
+
542
+ agent_settings.save()
543
+
544
+ Example disabling interaction logging:
545
+
546
+ .. code-block:: python
547
+
548
+ agent = project.get_agent("my_agent")
549
+ agent_settings = agent.get_settings()
550
+ version_settings = agent_settings.get_version_settings("v1")
551
+
552
+ agent_logging_selection = version_settings.interaction_logging_selection
553
+ agent_logging_selection.disable()
554
+
555
+ agent_settings.save()
556
+
557
+ :rtype: :class:`dataikuapi.dss.agent.DSSAgentInteractionLoggingSelection`
558
+ """
559
+ return DSSAgentInteractionLoggingSelection(self._get_or_create_interaction_logging_selection())
560
+
561
+ @interaction_logging_selection.setter
562
+ def interaction_logging_selection(self, value):
563
+ if isinstance(value, DSSAgentInteractionLoggingSelection):
564
+ value = value.get_raw()
565
+ self._get_internal_agent_settings()["interactionLoggingSelection"] = value