dataiku-api-client 14.7.2__tar.gz → 14.7.4__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.7.2 → dataiku_api_client-14.7.4}/HISTORY.txt +10 -0
  2. {dataiku_api_client-14.7.2/dataiku_api_client.egg-info → dataiku_api_client-14.7.4}/PKG-INFO +12 -2
  3. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4/dataiku_api_client.egg-info}/PKG-INFO +12 -2
  4. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataiku_api_client.egg-info/SOURCES.txt +1 -0
  5. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/agent_tool.py +5 -2
  6. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/cobuild.py +7 -1
  7. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/embeddings.py +11 -2
  8. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/llm.py +154 -16
  9. dataiku_api_client-14.7.4/dataikuapi/dss/mira.py +226 -0
  10. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dssclient.py +29 -3
  11. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/setup.py +1 -1
  12. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/LICENSE.txt +0 -0
  13. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/MANIFEST.in +0 -0
  14. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/README +0 -0
  15. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataiku_api_client.egg-info/dependency_links.txt +0 -0
  16. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataiku_api_client.egg-info/requires.txt +0 -0
  17. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataiku_api_client.egg-info/top_level.txt +0 -0
  18. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/__init__.py +0 -0
  19. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/apinode_admin/__init__.py +0 -0
  20. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/apinode_admin/auth.py +0 -0
  21. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/apinode_admin/service.py +0 -0
  22. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/apinode_admin_client.py +0 -0
  23. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/apinode_client.py +0 -0
  24. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/auth.py +0 -0
  25. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/base_client.py +0 -0
  26. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/__init__.py +0 -0
  27. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/admin.py +0 -0
  28. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/agent.py +0 -0
  29. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/agent_review.py +0 -0
  30. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/analysis.py +0 -0
  31. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/apideployer.py +0 -0
  32. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/apiservice.py +0 -0
  33. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/app.py +0 -0
  34. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/businessapp.py +0 -0
  35. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/codestudio.py +0 -0
  36. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/continuousactivity.py +0 -0
  37. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/dashboard.py +0 -0
  38. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/data_collection.py +0 -0
  39. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/data_directories_footprint.py +0 -0
  40. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/data_quality.py +0 -0
  41. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/dataset.py +0 -0
  42. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/discussion.py +0 -0
  43. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/document_extractor.py +0 -0
  44. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/drift.py +0 -0
  45. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/enterprise_asset_library.py +0 -0
  46. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/evaluationcomparison.py +0 -0
  47. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/evaluationstore.py +0 -0
  48. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/feature_store.py +0 -0
  49. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/flow.py +0 -0
  50. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/future.py +0 -0
  51. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/insight.py +0 -0
  52. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/job.py +0 -0
  53. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/jupyternotebook.py +0 -0
  54. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/knowledgebank.py +0 -0
  55. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/labeling_task.py +0 -0
  56. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/__init__.py +0 -0
  57. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/knowledge_bank.py +0 -0
  58. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/llm.py +0 -0
  59. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/tool.py +0 -0
  60. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/langchain/utils.py +0 -0
  61. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/llm_tracing/__init__.py +0 -0
  62. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/llm_utils/__init__.py +0 -0
  63. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/local_model.py +0 -0
  64. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/macro.py +0 -0
  65. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/managedfolder.py +0 -0
  66. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/meaning.py +0 -0
  67. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/messaging_channel.py +0 -0
  68. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/metrics.py +0 -0
  69. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/ml.py +0 -0
  70. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/mlflow.py +0 -0
  71. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/modelcomparison.py +0 -0
  72. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/modelevaluationstore.py +0 -0
  73. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/notebook.py +0 -0
  74. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/plugin.py +0 -0
  75. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/project.py +0 -0
  76. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/project_standards.py +0 -0
  77. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/projectdeployer.py +0 -0
  78. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/projectfolder.py +0 -0
  79. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/projectlibrary.py +0 -0
  80. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/recipe.py +0 -0
  81. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/retrieval_augmented_llm.py +0 -0
  82. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/savedmodel.py +0 -0
  83. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/scenario.py +0 -0
  84. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/semantic_model.py +0 -0
  85. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/sqlnotebook.py +0 -0
  86. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/sqlquery.py +0 -0
  87. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/statistics.py +0 -0
  88. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/streaming_endpoint.py +0 -0
  89. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/tools/__init__.py +0 -0
  90. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/tools/codegen.py +0 -0
  91. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/tools/langchain.py +0 -0
  92. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/unifiedmonitoring.py +0 -0
  93. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/utils.py +0 -0
  94. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/webapp.py +0 -0
  95. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/wiki.py +0 -0
  96. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss/workspace.py +0 -0
  97. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss_plugin_mlflow/__init__.py +0 -0
  98. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss_plugin_mlflow/artifact_repository.py +0 -0
  99. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss_plugin_mlflow/header_provider.py +0 -0
  100. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/dss_plugin_mlflow/utils.py +0 -0
  101. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/__init__.py +0 -0
  102. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/cloudaccounts.py +0 -0
  103. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/future.py +0 -0
  104. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/instances.py +0 -0
  105. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/instancesettingstemplates.py +0 -0
  106. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/loadbalancers.py +0 -0
  107. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/tenant.py +0 -0
  108. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fm/virtualnetworks.py +0 -0
  109. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/fmclient.py +0 -0
  110. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/__init__.py +0 -0
  111. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/admin.py +0 -0
  112. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/admin_blueprint_designer.py +0 -0
  113. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/admin_custom_pages_handler.py +0 -0
  114. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/admin_roles_permissions_handler.py +0 -0
  115. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/artifact.py +0 -0
  116. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/artifact_search.py +0 -0
  117. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/blueprint.py +0 -0
  118. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/custom_page.py +0 -0
  119. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/future.py +0 -0
  120. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/time_series.py +0 -0
  121. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/uploaded_file.py +0 -0
  122. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern/users_container.py +0 -0
  123. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/govern_client.py +0 -0
  124. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/iam/__init__.py +0 -0
  125. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/iam/settings.py +0 -0
  126. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/__init__.py +0 -0
  127. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/exceptions.py +0 -0
  128. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/group.py +0 -0
  129. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/node.py +0 -0
  130. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/profile.py +0 -0
  131. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/response.py +0 -0
  132. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/task.py +0 -0
  133. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad/user.py +0 -0
  134. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/launchpad_client.py +0 -0
  135. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/dataikuapi/utils.py +0 -0
  136. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/requirements.txt +0 -0
  137. {dataiku_api_client-14.7.2 → dataiku_api_client-14.7.4}/setup.cfg +0 -0
@@ -2,6 +2,16 @@ Changelog
2
2
  ==========
3
3
 
4
4
 
5
+ 14.7.4 (2026-09-14)
6
+ -------------------
7
+
8
+ * Initial release for DSS 14.7.4
9
+
10
+ 14.7.3 (2026-08-03)
11
+ -------------------
12
+
13
+ * Initial release for DSS 14.7.3
14
+
5
15
  14.7.2 (2026-07-13)
6
16
  -------------------
7
17
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.2
3
+ Version: 14.7.4
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/14.7.4
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,16 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+ 14.7.4 (2026-09-14)
40
+ -------------------
41
+
42
+ * Initial release for DSS 14.7.4
43
+
44
+ 14.7.3 (2026-08-03)
45
+ -------------------
46
+
47
+ * Initial release for DSS 14.7.3
48
+
39
49
  14.7.2 (2026-07-13)
40
50
  -------------------
41
51
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.2
3
+ Version: 14.7.4
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/14.7.4
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,16 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+ 14.7.4 (2026-09-14)
40
+ -------------------
41
+
42
+ * Initial release for DSS 14.7.4
43
+
44
+ 14.7.3 (2026-08-03)
45
+ -------------------
46
+
47
+ * Initial release for DSS 14.7.3
48
+
39
49
  14.7.2 (2026-07-13)
40
50
  -------------------
41
51
 
@@ -61,6 +61,7 @@ dataikuapi/dss/managedfolder.py
61
61
  dataikuapi/dss/meaning.py
62
62
  dataikuapi/dss/messaging_channel.py
63
63
  dataikuapi/dss/metrics.py
64
+ dataikuapi/dss/mira.py
64
65
  dataikuapi/dss/ml.py
65
66
  dataikuapi/dss/mlflow.py
66
67
  dataikuapi/dss/modelcomparison.py
@@ -64,7 +64,7 @@ class DSSAgentTool(object):
64
64
  """
65
65
  return self.tool_id
66
66
 
67
- def get_descriptor(self):
67
+ def get_descriptor(self, context=None):
68
68
  """
69
69
  Get the descriptor of the tool
70
70
 
@@ -73,7 +73,10 @@ class DSSAgentTool(object):
73
73
  """
74
74
 
75
75
  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))
76
+ if context is None:
77
+ self._descriptor = self.client._perform_json("GET", "/projects/%s/agents/tools/%s/descriptor" % (self.project_key, self.tool_id))
78
+ else:
79
+ self._descriptor = self.client._perform_json("POST", "/projects/%s/agents/tools/%s/descriptor" % (self.project_key, self.tool_id), body={"context": context})
77
80
  return self._descriptor
78
81
 
79
82
  def get_settings(self):
@@ -435,7 +435,7 @@ class DSSCobuildConversation(object):
435
435
  self._messages.append(response)
436
436
  return response
437
437
 
438
- def answer_question(self, answers=None, rejected=False, used_custom_answer=False):
438
+ def answer_question(self, answers=None, rejected=False, used_custom_answer=False, selected_objects=None):
439
439
  """
440
440
  Answer a pending question request and wait for the assistant's next response.
441
441
 
@@ -448,6 +448,9 @@ class DSSCobuildConversation(object):
448
448
  ``rejected=True``. Defaults to ``[]``.
449
449
  :param bool rejected: whether to decline answering the question
450
450
  :param bool used_custom_answer: whether one of the answers came from the custom free-text input
451
+ :param selected_objects: object selection the assistant should focus on. It is reused for
452
+ subsequent messages and question answers, unless overwritten
453
+ :type selected_objects: list[:class:`.DSSDataset`, :class:`.DSSRecipe`, :class:`.DSSLabelingTask`, :class:`.DSSManagedFolder`, :class:`.DSSSavedModel`, :class:`.DSSKnowledgeBank`, :class:`.DSSModelEvaluationStore` or :class:`.DSSStreamingEndpoint`]
451
454
 
452
455
  :returns: the assistant's response after the question answer
453
456
  :rtype: :class:`CobuildAssistantResponse`
@@ -458,6 +461,8 @@ class DSSCobuildConversation(object):
458
461
  raise ValueError("answers must be a list of strings")
459
462
  if self._pending_question_id is None:
460
463
  raise ValueError("No pending question request. Call send_message first and check is_question_request.")
464
+ if selected_objects is not None:
465
+ self._selected_objects = _DSS_objects_to_selected(self.project_key, selected_objects)
461
466
 
462
467
  question_id = self._pending_question_id
463
468
  self._pending_question_id = None
@@ -472,6 +477,7 @@ class DSSCobuildConversation(object):
472
477
  "rejected": rejected,
473
478
  "answers": answers,
474
479
  "usedCustomAnswer": used_custom_answer,
480
+ "selectedObjects": self._selected_objects or [],
475
481
  },
476
482
  )
477
483
  response = CobuildAssistantResponse(raw)
@@ -2,16 +2,25 @@
2
2
  import asyncio
3
3
  import concurrent
4
4
  import logging
5
- import threading
5
+ import threading
6
+ import itertools
6
7
 
7
8
  from typing import Callable, List, Any, Union
8
9
 
9
10
  import pydantic
11
+
12
+ _thread_pool_executor_counter = itertools.count().__next__
13
+
14
+ def next_thread_pool_executor_prefix(prefix):
15
+ return "{}-{}".format(prefix, _thread_pool_executor_counter())
16
+
10
17
  try:
11
18
  from langchain_core.embeddings.embeddings import Embeddings
12
19
  except ModuleNotFoundError:
13
20
  from langchain.embeddings.base import Embeddings
14
21
  from langchain_core.callbacks import BaseCallbackHandler, LLMManagerMixin
22
+
23
+
15
24
  from dataikuapi.dss.llm_tracing import new_trace, SpanBuilder
16
25
 
17
26
  from dataikuapi.dss.langchain.utils import must_use_deprecated_pydantic_config
@@ -121,7 +130,7 @@ class DKUEmbeddings(LockedDownBaseModel, Embeddings):
121
130
 
122
131
  async def aembed_documents(self, texts: List[str]) -> List[List[float]]:
123
132
  loop = asyncio.get_event_loop()
124
- with concurrent.futures.ThreadPoolExecutor() as executor:
133
+ with concurrent.futures.ThreadPoolExecutor(thread_name_prefix=next_thread_pool_executor_prefix("DKUEmbeddingsAsyncExecutor")) as executor:
125
134
  result = await loop.run_in_executor(executor, self.embed_documents, texts)
126
135
  return result
127
136
 
@@ -199,6 +199,8 @@ class DSSLLMEmbeddingsQuery(object):
199
199
  def new_guardrail(self, type):
200
200
  """
201
201
  Start adding a guardrail to the request. You need to configure the returned object, and call add() to actually add it
202
+
203
+ :rtype: :class:`DSSLLMRequestGuardrailBuilder`
202
204
  """
203
205
  return DSSLLMRequestGuardrailBuilder(self, type)
204
206
 
@@ -420,15 +422,27 @@ class SettingsMixin(object):
420
422
 
421
423
 
422
424
  class DSSLLMRequestGuardrailBuilder(object):
425
+ """
426
+ .. important::
427
+ Do not create this class directly, use :meth:`dataikuapi.dss.llm.DSSLLMCompletionQuery.new_guardrail`,
428
+ :meth:`dataikuapi.dss.llm.DSSLLMCompletionsQuery.new_guardrail`, :meth:`dataikuapi.dss.llm.DSSLLMEmbeddingsQuery.new_guardrail` or
429
+ :meth:`dataikuapi.dss.llm.DSSLLMImageGenerationQuery.new_guardrail`.
430
+ """
431
+
423
432
  def __init__(self, request, type):
424
433
  self.request = request
425
- self.guardrail = { "type" : type, "enabled": True, "params" : {}}
434
+ self.guardrail = {"type" : type, "enabled": True, "params" : {}}
426
435
 
427
436
  @property
428
437
  def params(self):
438
+ """
439
+ :return: The parameters of this guardrail
440
+ :rtype: dict
441
+ """
429
442
  return self.guardrail["params"]
430
443
 
431
444
  def add(self):
445
+ """Add this guardrail to the completion query"""
432
446
  if self.request._guardrails is None:
433
447
  self.request._guardrails = {"guardrails" : []}
434
448
  self.request._guardrails["guardrails"].append(self.guardrail)
@@ -537,6 +551,8 @@ class DSSLLMCompletionQuery(DSSLLMCompletionsQuerySingleQuery, SettingsMixin):
537
551
  def new_guardrail(self, type):
538
552
  """
539
553
  Start adding a guardrail to the request. You need to configure the returned object, and call add() to actually add it
554
+
555
+ :rtype: :class:`DSSLLMRequestGuardrailBuilder`
540
556
  """
541
557
  return DSSLLMRequestGuardrailBuilder(self, type)
542
558
 
@@ -638,6 +654,8 @@ class DSSLLMCompletionsQuery(SettingsMixin):
638
654
  def new_guardrail(self, type):
639
655
  """
640
656
  Start adding a guardrail to the request. You need to configure the returned object, and call add() to actually add it
657
+
658
+ :rtype: :class:`DSSLLMRequestGuardrailBuilder`
641
659
  """
642
660
  return DSSLLMRequestGuardrailBuilder(self, type)
643
661
 
@@ -664,7 +682,7 @@ class DSSLLMCompletionsQuery(SettingsMixin):
664
682
  return DSSLLMCompletionsResponse(ret["responses"], response_parser=self._response_parser)
665
683
 
666
684
 
667
- class DSSLLMCompletionQueryMultipartBuilder(object):
685
+ class _DSSLLMCompletionQueryMultipartBuilder(object):
668
686
  def __init__(self):
669
687
  self.parts = []
670
688
 
@@ -681,6 +699,8 @@ class DSSLLMCompletionQueryMultipartBuilder(object):
681
699
  def with_text(self, text):
682
700
  """
683
701
  Add a text part to the multipart message
702
+
703
+ :param str text: The text to add
684
704
  """
685
705
  self.parts.append({"type": "TEXT", "text": text})
686
706
  return self
@@ -692,7 +712,7 @@ class DSSLLMCompletionQueryMultipartBuilder(object):
692
712
  :param Union[str, bytes] image: The image
693
713
  :param str mime_type: None for default
694
714
  """
695
- img_b64 = DSSLLMCompletionQueryMultipartMessage._encode_image(image)
715
+ img_b64 = _DSSLLMCompletionQueryMultipartBuilder._encode_image(image)
696
716
 
697
717
  part = {
698
718
  "type": "IMAGE_INLINE",
@@ -713,7 +733,7 @@ class DSSLLMCompletionQueryMultipartBuilder(object):
713
733
  :param Union[str, bytes] image: The image
714
734
  :param str mime_type: None for default
715
735
  """
716
- img_b64 = DSSLLMCompletionQueryMultipartMessage._encode_image(image)
736
+ img_b64 = _DSSLLMCompletionQueryMultipartBuilder._encode_image(image)
717
737
 
718
738
  image_part = {
719
739
  "type": "IMAGE_INLINE",
@@ -736,14 +756,13 @@ class DSSLLMCompletionQueryMultipartBuilder(object):
736
756
  """
737
757
  Add an image url part to the multipart message
738
758
 
739
- :param image: str the image url
759
+ :param str image: the image url
740
760
  """
741
-
742
761
  self.parts.append({"type": "IMAGE_URI", "imageUrl": image})
743
762
  return self
744
763
 
745
764
 
746
- class DSSLLMCompletionQueryMultipartMessage(DSSLLMCompletionQueryMultipartBuilder):
765
+ class DSSLLMCompletionQueryMultipartMessage(_DSSLLMCompletionQueryMultipartBuilder):
747
766
  """
748
767
  .. important::
749
768
  Do not create this class directly, use :meth:`dataikuapi.dss.llm.DSSLLMCompletionQuery.new_multipart_message` or
@@ -761,8 +780,43 @@ class DSSLLMCompletionQueryMultipartMessage(DSSLLMCompletionQueryMultipartBuilde
761
780
  self.q.cq["messages"].append(self.msg)
762
781
  return self.q
763
782
 
783
+ def with_text(self, text):
784
+ """
785
+ Add a text part to the multipart message
786
+
787
+ :param str text: The text to add
788
+ """
789
+ return super().with_text(text)
790
+
791
+ def with_inline_image(self, image, mime_type=None):
792
+ """
793
+ Add an image part to the multipart message
794
+
795
+ :param Union[str, bytes] image: The image
796
+ :param str mime_type: None for default
797
+ """
798
+ return super().with_inline_image(image, mime_type)
764
799
 
765
- class DSSLLMCompletionQueryMultipartToolOutput(DSSLLMCompletionQueryMultipartBuilder):
800
+ def with_captioned_image_inline(self, caption, image, mime_type=None):
801
+ """
802
+ Add a captioned image part to the multipart message
803
+
804
+ :param str caption: Image caption
805
+ :param Union[str, bytes] image: The image
806
+ :param str mime_type: None for default
807
+ """
808
+ return super().with_captioned_image_inline(caption, image, mime_type)
809
+
810
+ def with_image_url(self, image):
811
+ """
812
+ Add an image url part to the multipart message
813
+
814
+ :param str image: The image url
815
+ """
816
+ return super().with_image_url(image)
817
+
818
+
819
+ class DSSLLMCompletionQueryMultipartToolOutput(_DSSLLMCompletionQueryMultipartBuilder):
766
820
  """
767
821
  .. important::
768
822
  Do not create this class directly, use :meth:`dataikuapi.dss.llm.DSSLLMCompletionQuery.new_multipart_tool_output` or
@@ -787,24 +841,75 @@ class DSSLLMCompletionQueryMultipartToolOutput(DSSLLMCompletionQueryMultipartBui
787
841
  self.q.cq["messages"].append(self.msg)
788
842
  return self.q
789
843
 
844
+ def with_text(self, text):
845
+ """
846
+ Add a text part to the multipart tool output
847
+
848
+ :param str text: The text to add
849
+ """
850
+ return super().with_text(text)
851
+
852
+ def with_inline_image(self, image, mime_type=None):
853
+ """
854
+ Add an image part to the multipart tool output
855
+
856
+ :param Union[str, bytes] image: The image
857
+ :param str mime_type: None for default
858
+ """
859
+ return super().with_inline_image(image, mime_type)
860
+
861
+ def with_captioned_image_inline(self, caption, image, mime_type=None):
862
+ """
863
+ Add a captioned image part to the multipart tool output
864
+
865
+ :param str caption: Image caption
866
+ :param Union[str, bytes] image: The image
867
+ :param str mime_type: None for default
868
+ """
869
+ return super().with_captioned_image_inline(caption, image, mime_type)
870
+
871
+ def with_image_url(self, image):
872
+ """
873
+ Add an image url part to the multipart tool output
874
+
875
+ :param str image: The image url
876
+ """
877
+ return super().with_image_url(image)
878
+
790
879
 
791
880
  class DSSLLMStreamedCompletionChunk(object):
881
+ """
882
+ A handle to interact with a streamed completion query chunk.
883
+
884
+ .. important::
885
+ Do not create this class directly, iterate over a :class:`dataikuapi.dss.llm.DSSLLMStreamedCompletionChunks` iterator instead to generate the chunks instead.
886
+ """
887
+
792
888
  def __init__(self, data):
793
889
  self.data = data
794
890
 
795
891
  @property
796
892
  def type(self):
797
- """Type of this chunk, either "content" or "event" """
893
+ """
894
+ :return: Type of this chunk, either "content" or "event"
895
+ :rtype: Literal["content", "event"]
896
+ """
798
897
  return self.data.get("type", "content")
799
898
 
800
899
  @property
801
900
  def text(self):
802
- """If this chunk is content and has text, the (partial) text"""
901
+ """
902
+ :return: If this chunk is content and has text, the (partial) text
903
+ :rtype: bool
904
+ """
803
905
  return self.data.get("text", None)
804
906
 
805
907
  @property
806
908
  def event_kind(self):
807
- """If this chunk is an event, its kind"""
909
+ """
910
+ :return: If this chunk is an event, its kind
911
+ :rtype: str
912
+ """
808
913
  return self.data.get("eventKind", None)
809
914
 
810
915
  def __repr__(self):
@@ -812,16 +917,31 @@ class DSSLLMStreamedCompletionChunk(object):
812
917
 
813
918
 
814
919
  class DSSLLMStreamedCompletionFooter(object):
920
+ """
921
+ A handle to interact with a streamed completion query footer.
922
+
923
+ .. important::
924
+ Do not create this class directly, iterate over a :class:`dataikuapi.dss.llm.DSSLLMStreamedCompletionChunks` iterator instead to generate the chunks instead.
925
+ """
926
+
815
927
  def __init__(self, data):
816
928
  self.data = data
817
929
 
818
930
  # Compatibility for code that just checks for "type""
819
931
  @property
820
932
  def type(self):
933
+ """
934
+ :return: Type of this chunk, to distinguish it from :class:`dataikuapi.dss.llm.DSSLLMStreamedCompletionChunk` chunks. Can only be "footer"
935
+ :rtype: Literal["footer"]
936
+ """
821
937
  return "footer"
822
938
 
823
939
  @property
824
940
  def trace(self):
941
+ """
942
+ :return: The trace of the completion query if available, None otherwise.
943
+ :rtype: Union[dict, None]
944
+ """
825
945
  return self.data.get("trace", None)
826
946
 
827
947
  @property
@@ -846,14 +966,14 @@ class _SSEClient(object):
846
966
  """Reads the raw source and yields events. Reassembles events
847
967
  that may span multiple HTTP chunks"""
848
968
  #logging.debug("SSEClient._read")
849
- data = b''
969
+ data = bytearray()
850
970
  for chunk in self.raw_source:
851
971
  #logging.info("SSEClient._read: got chunk (len=%s): %s" % (len(chunk), chunk))
852
972
  for line in chunk.splitlines(True):
853
- data += line
973
+ data.extend(line)
854
974
  if data.endswith(b'\r\r') or data.endswith(b'\n\n') or data.endswith(b'\r\n\r\n'):
855
975
  yield data
856
- data = b''
976
+ data = bytearray()
857
977
  #logging.info("SSEClient._read: no more chunk")
858
978
  if data:
859
979
  yield data
@@ -863,6 +983,7 @@ class _SSEClient(object):
863
983
  #logging.info("SSEClient._iterevents: got event")
864
984
  evt = _SSEEvent()
865
985
 
986
+ data_lines = []
866
987
  for line in event_chunk.splitlines():
867
988
  line = line.decode("utf8")
868
989
 
@@ -879,10 +1000,13 @@ class _SSEClient(object):
879
1000
  value = ''
880
1001
 
881
1002
  if field == 'data':
882
- evt.__dict__[field] += value + '\n'
1003
+ data_lines.append(value)
883
1004
  else:
884
1005
  evt.__dict__[field] = value
885
1006
 
1007
+ if data_lines:
1008
+ evt.data = '\n'.join(data_lines) + '\n'
1009
+
886
1010
  if evt.event is not None:
887
1011
  #logging.info("Yielding event: %s" % evt.__dict__)
888
1012
  yield evt
@@ -890,7 +1014,11 @@ class _SSEClient(object):
890
1014
 
891
1015
  class DSSLLMCompletionResponse(object):
892
1016
  """
893
- Response to a completion
1017
+ A handle to interact with a completion query result.
1018
+
1019
+ .. important::
1020
+ Do not create this class directly, use :meth:`dataikuapi.dss.llm.DSSLLMCompletionQuery.execute` or
1021
+ :attr:`dataikuapi.dss.llm.DSSLLMCompletionsResponse.responses` or :attr:`dataikuapi.dss.llm.DSSLLMStreamedCompletionChunks.response` instead.
894
1022
  """
895
1023
  def __init__(self, raw_resp=None, text=None, finish_reason=None, response_parser=None, trace=None, query=None):
896
1024
  if raw_resp is not None:
@@ -990,6 +1118,10 @@ class DSSLLMCompletionResponse(object):
990
1118
 
991
1119
  @property
992
1120
  def trace(self):
1121
+ """
1122
+ :return: The trace of the completion query if available, None otherwise.
1123
+ :rtype: Union[dict, None]
1124
+ """
993
1125
  return self._raw.get("trace", None)
994
1126
 
995
1127
  @property
@@ -1157,6 +1289,8 @@ class DSSLLMImageGenerationQuery(object):
1157
1289
  def new_guardrail(self, type):
1158
1290
  """
1159
1291
  Start adding a guardrail to the request. You need to configure the returned object, and call add() to actually add it
1292
+
1293
+ :rtype: :class:`DSSLLMRequestGuardrailBuilder`
1160
1294
  """
1161
1295
  return DSSLLMRequestGuardrailBuilder(self, type)
1162
1296
 
@@ -1381,6 +1515,10 @@ class DSSLLMImageGenerationResponse(object):
1381
1515
 
1382
1516
  @property
1383
1517
  def trace(self):
1518
+ """
1519
+ :return: The trace of the image generation query if available, None otherwise.
1520
+ :rtype: Union[dict, None]
1521
+ """
1384
1522
  return self._raw.get("trace", None)
1385
1523
 
1386
1524
  @property