Skip to content

Commit 26b0e34

Browse files
authored
14.6.0 Publish on PyPI (#357)
* Release metadata * Sync sources with main repositories
1 parent b1fd5fc commit 26b0e34

15 files changed

Lines changed: 360 additions & 28 deletions

HISTORY.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ Changelog
22
==========
33

44

5+
14.6.0 (2026-05-27)
6+
-------------------
7+
8+
* Initial release for DSS 14.6.0
59

610
14.5.2 (2026-05-25)
711
-------------------

dataikuapi/dss/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,6 +2202,7 @@ def add_container_runtime_addition(self, container_runtime_addition):
22022202
* PYTHON36_SUPPORT
22032203
* PYTHON37_SUPPORT
22042204
* PYTHON38_SUPPORT
2205+
* HUGGING_FACE_LOCAL_GPU
22052206
22062207
:param dict container_runtime_addition: a dict with the container runtime addition definition
22072208
"""

dataikuapi/dss/agent.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ def disable(self):
226226
self.mode = self.MODE_NONE
227227

228228

229+
# Neutral aliases for shared LLM interaction logging concepts.
230+
DSSLLMInteractionLoggingSettings = DSSAgentInteractionLoggingSettings
231+
DSSLLMInteractionLoggingSelection = DSSAgentInteractionLoggingSelection
232+
233+
229234
class DSSAgentListItem(DSSTaggableObjectListItem):
230235
"""
231236
An item in a list of agents
@@ -521,7 +526,7 @@ def interaction_logging_selection(self):
521526
.. code-block:: python
522527
523528
project = client.get_project("MYPROJECT")
524-
project.create_agent_interaction_logging_dataset(
529+
project.create_llm_interaction_logging_dataset(
525530
"agent_logs",
526531
connection_id="filesystem_managed",
527532
time_partitioning="DAY",

dataikuapi/dss/agent_review.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,32 @@ def nb_executions(self):
214214
def nb_executions(self, value):
215215
self.data["nbExecutions"] = value
216216

217+
@property
218+
def hitl_validation_policy(self):
219+
"""
220+
Review-wide default HITL validation policy used when creating a test.
221+
Possible values are ``ACCEPT`` or ``REJECT``.
222+
:rtype: str
223+
"""
224+
return self.data.get("hitlValidationPolicy")
225+
226+
@hitl_validation_policy.setter
227+
def hitl_validation_policy(self, value):
228+
self.data["hitlValidationPolicy"] = value
229+
230+
@property
231+
def hitl_max_validation_turns(self):
232+
"""
233+
Maximum number of validation turns auto-answered during a test run before stopping.
234+
Possible values are integers greater than or equal to ``1``.
235+
:rtype: int
236+
"""
237+
return self.data.get("hitlMaxValidationTurns")
238+
239+
@hitl_max_validation_turns.setter
240+
def hitl_max_validation_turns(self, value):
241+
self.data["hitlMaxValidationTurns"] = value
242+
217243
def get_trait(self, trait_id):
218244
"""
219245
Get a specific trait by its ID.
@@ -278,13 +304,14 @@ def get_test(self, test_id):
278304
)
279305
return DSSAgentReviewTest(self.dss_client, self.project_key, test)
280306

281-
def create_test(self, query=None, reference_answer=None, expectations=None):
307+
def create_test(self, query=None, reference_answer=None, expectations=None, hitl_validation_policy=None):
282308
"""
283309
Create a new test for this agent review.
284310
285311
:param str query: Query to test the agent. Optional.
286312
:param str reference_answer: Reference answer. Optional.
287313
:param str expectations: Expectations on the agent answer. Optional.
314+
:param str hitl_validation_policy: Per-test HITL validation policy. Optional.
288315
:returns: The created test object.
289316
:rtype: :class:`DSSAgentReviewTest`
290317
"""
@@ -294,13 +321,14 @@ def create_test(self, query=None, reference_answer=None, expectations=None):
294321
"query": query,
295322
"referenceAnswer": reference_answer,
296323
"expectations": expectations,
324+
"hitlValidationPolicy": hitl_validation_policy,
297325
}
298326
test = self.dss_client._perform_json(
299327
"POST", "/projects/%s/agent-reviews/tests" % self.project_key, body=body
300328
)
301329
return DSSAgentReviewTest(self.dss_client, self.project_key, test)
302330

303-
def create_tests_from_dataset(self, full_dataset_name, query_column, reference_answer_column=None, expectations_column=None, top_n=None, partitions=None, latest_partitions_n=None):
331+
def create_tests_from_dataset(self, full_dataset_name, query_column, reference_answer_column=None, expectations_column=None, top_n=None, partitions=None, latest_partitions_n=None, hitl_validation_policy_column=None):
304332
"""
305333
Create new tests for this agent review by importing them from a dataset.
306334
@@ -311,6 +339,7 @@ def create_tests_from_dataset(self, full_dataset_name, query_column, reference_a
311339
:param int top_n: Only take the first n rows of the dataset. Optional.
312340
:param list[str] partitions: For partitioned datasets, only consider the given partitions. Optional.
313341
:param int latest_partitions_n: For partitioned datasets and if partitions is not set, only consider the latest n partitions. Optional.
342+
:param str hitl_validation_policy_column: Name of the column containing per-test HITL validation policy. Optional.
314343
:returns: A dictionary with keys:
315344
- "createdTestIds": list of ids of the created tests
316345
- "error": The error message if any occurred
@@ -324,6 +353,7 @@ def create_tests_from_dataset(self, full_dataset_name, query_column, reference_a
324353
"queryColumn": query_column,
325354
"referenceAnswerColumn": reference_answer_column,
326355
"expectationsColumn": expectations_column,
356+
"hitlValidationPolicyColumn": hitl_validation_policy_column,
327357
}
328358
if top_n is not None:
329359
body["samplingMethod"] = "HEAD_SEQUENTIAL"
@@ -587,6 +617,19 @@ def expectations(self):
587617
def expectations(self, value):
588618
self.data["expectations"] = value
589619

620+
@property
621+
def hitl_validation_policy(self):
622+
"""
623+
Per-test HITL validation policy.
624+
Possible values are ``ACCEPT`` or ``REJECT``.
625+
:rtype: str
626+
"""
627+
return self.data.get("hitlValidationPolicy")
628+
629+
@hitl_validation_policy.setter
630+
def hitl_validation_policy(self, value):
631+
self.data["hitlValidationPolicy"] = value
632+
590633
@property
591634
def creation_timestamp(self):
592635
"""
@@ -735,6 +778,15 @@ def expectations(self):
735778
"""
736779
return self.get("expectations")
737780

781+
@property
782+
def hitl_validation_policy(self):
783+
"""
784+
Per-test HITL validation policy.
785+
Possible values are ``ACCEPT`` or ``REJECT``.
786+
:rtype: str
787+
"""
788+
return self.get("hitlValidationPolicy")
789+
738790

739791
class DSSAgentReviewRun(object):
740792
"""

dataikuapi/dss/knowledgebank.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ def id(self):
245245
@property
246246
def vector_store_type(self):
247247
"""
248-
Returns the type of storage backing the vector store (could be CHROMA, PINECONE, ELASTICSEARCH, AZURE_AI_SEARCH, VERTEX_AI_GCS_BASED, FAISS, QDRANT_LOCAL)
248+
Returns the type of storage backing the vector store (could be CHROMA, PINECONE, ELASTICSEARCH, AZURE_AI_SEARCH, SNOWFLAKE_CORTEX_SEARCH, VERTEX_AI_GCS_BASED, FAISS, QDRANT_LOCAL)
249249
250250
:rtype: str
251251
"""

dataikuapi/dss/ml.py

Lines changed: 113 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1493,11 +1493,9 @@ def strategy(self, _):
14931493
"To update the search strategy, use <HyperparameterSearchSettings object>.strategy = ..., "
14941494
"obtained with <DSSPredictionMLTaskSettings object>.get_hyperparameter_search_settings()")
14951495

1496-
1497-
class RandomForestSettings(PredictionAlgorithmSettings):
1498-
1496+
class _RandomForestSettingsBase(PredictionAlgorithmSettings):
14991497
def __init__(self, raw_settings, hyperparameter_search_params):
1500-
super(RandomForestSettings, self).__init__(raw_settings, hyperparameter_search_params)
1498+
super(_RandomForestSettingsBase, self).__init__(raw_settings, hyperparameter_search_params)
15011499
self.n_estimators = self._register_numerical_hyperparameter("n_estimators")
15021500
self.min_samples_leaf = self._register_numerical_hyperparameter("min_samples_leaf")
15031501
self.max_tree_depth = self._register_numerical_hyperparameter("max_tree_depth")
@@ -1507,10 +1505,19 @@ def __init__(self, raw_settings, hyperparameter_search_params):
15071505
self.selection_mode = self._register_single_category_hyperparameter("selection_mode", accepted_values=["sqrt", "log2", "number", "prop"])
15081506

15091507

1510-
class LightGBMSettings(PredictionAlgorithmSettings):
1508+
class TimeseriesRandomForestSettings(_RandomForestSettingsBase):
1509+
pass
1510+
15111511

1512+
class RandomForestSettings(_RandomForestSettingsBase):
15121513
def __init__(self, raw_settings, hyperparameter_search_params):
1513-
super(LightGBMSettings, self).__init__(raw_settings, hyperparameter_search_params)
1514+
super(RandomForestSettings, self).__init__(raw_settings, hyperparameter_search_params)
1515+
self.allow_sparse_matrices = self._register_single_value_hyperparameter("allow_sparse_matrices", accepted_types=[bool])
1516+
1517+
1518+
class _LightGBMSettingsBase(PredictionAlgorithmSettings):
1519+
def __init__(self, raw_settings, hyperparameter_search_params):
1520+
super(_LightGBMSettingsBase, self).__init__(raw_settings, hyperparameter_search_params)
15141521
self.boosting_type = self._register_categorical_hyperparameter("boosting_type")
15151522
self.num_leaves = self._register_numerical_hyperparameter("num_leaves")
15161523
self.learning_rate = self._register_numerical_hyperparameter("learning_rate")
@@ -1521,9 +1528,6 @@ def __init__(self, raw_settings, hyperparameter_search_params):
15211528
self.colsample_bytree = self._register_numerical_hyperparameter("colsample_bytree")
15221529
self.reg_alpha = self._register_numerical_hyperparameter("reg_alpha")
15231530
self.reg_lambda = self._register_numerical_hyperparameter("reg_lambda")
1524-
1525-
self.early_stopping = self._register_single_value_hyperparameter("early_stopping", accepted_types=[bool])
1526-
self.early_stopping_rounds = self._register_single_value_hyperparameter("early_stopping_rounds", accepted_types=[int])
15271531
self.random_state = self._register_single_value_hyperparameter("random_state", accepted_types=[int])
15281532
self.n_jobs = self._register_single_value_hyperparameter("n_jobs", accepted_types=[int])
15291533
self.max_depth = self._register_single_value_hyperparameter("max_depth", accepted_types=[int])
@@ -1532,6 +1536,18 @@ def __init__(self, raw_settings, hyperparameter_search_params):
15321536
self.use_bagging = self._register_single_value_hyperparameter("use_bagging", accepted_types=[bool])
15331537

15341538

1539+
class TimeseriesLightGBMSettings(_LightGBMSettingsBase):
1540+
pass
1541+
1542+
1543+
class LightGBMSettings(_LightGBMSettingsBase):
1544+
def __init__(self, raw_settings, hyperparameter_search_params):
1545+
super(LightGBMSettings, self).__init__(raw_settings, hyperparameter_search_params)
1546+
self.early_stopping = self._register_single_value_hyperparameter("early_stopping", accepted_types=[bool])
1547+
self.early_stopping_rounds = self._register_single_value_hyperparameter("early_stopping_rounds", accepted_types=[int])
1548+
self.allow_sparse_matrices = self._register_single_value_hyperparameter("allow_sparse_matrices", accepted_types=[bool])
1549+
1550+
15351551
class TabICLSettings(PredictionAlgorithmSettings):
15361552

15371553
def __init__(self, raw_settings, hyperparameter_search_params):
@@ -1551,10 +1567,10 @@ def __init__(self, raw_settings, hyperparameter_search_params):
15511567
self.outlier_threshold = self._register_single_value_hyperparameter("outlier_threshold")
15521568

15531569

1554-
class XGBoostSettings(PredictionAlgorithmSettings):
1570+
class _XGBoostSettingsBase(PredictionAlgorithmSettings):
15551571

15561572
def __init__(self, raw_settings, hyperparameter_search_params):
1557-
super(XGBoostSettings, self).__init__(raw_settings, hyperparameter_search_params)
1573+
super(_XGBoostSettingsBase, self).__init__(raw_settings, hyperparameter_search_params)
15581574
self.max_depth = self._register_numerical_hyperparameter("max_depth")
15591575
self.learning_rate = self._register_numerical_hyperparameter("learning_rate")
15601576
self.gamma = self._register_numerical_hyperparameter("gamma")
@@ -1575,8 +1591,6 @@ def __init__(self, raw_settings, hyperparameter_search_params):
15751591
self.missing = self._register_single_value_hyperparameter("missing", accepted_types=[int, float])
15761592
self.tree_method = self._register_single_category_hyperparameter("tree_method", accepted_values=["auto", "exact", "approx", "hist"])
15771593
self.seed = self._register_single_value_hyperparameter("seed", accepted_types=[int])
1578-
self.enable_early_stopping = self._register_single_value_hyperparameter("enable_early_stopping", accepted_types=[bool])
1579-
self.early_stopping_rounds = self._register_single_value_hyperparameter("early_stopping_rounds", accepted_types=[int])
15801594
self.tweedie_variance_power = self._register_single_value_hyperparameter("tweedie_variance_power", accepted_types=[int, float])
15811595

15821596
@property
@@ -1614,6 +1628,18 @@ def gpu_tree_method(self, value):
16141628
self.tree_method.set_value(value)
16151629

16161630

1631+
class TimeseriesXGBoostSettings(_XGBoostSettingsBase):
1632+
pass
1633+
1634+
1635+
class XGBoostSettings(_XGBoostSettingsBase):
1636+
def __init__(self, raw_settings, hyperparameter_search_params):
1637+
super(XGBoostSettings, self).__init__(raw_settings, hyperparameter_search_params)
1638+
self.enable_early_stopping = self._register_single_value_hyperparameter("enable_early_stopping", accepted_types=[bool])
1639+
self.early_stopping_rounds = self._register_single_value_hyperparameter("early_stopping_rounds", accepted_types=[int])
1640+
self.allow_sparse_matrices = self._register_single_value_hyperparameter("allow_sparse_matrices", accepted_types=[bool])
1641+
1642+
16171643
class GradientBoostedTreesSettings(PredictionAlgorithmSettings):
16181644

16191645
def __init__(self, raw_settings, hyperparameter_search_params):
@@ -1866,6 +1892,71 @@ def __init__(self, raw_settings, hyperparameter_search_params):
18661892
self.maxiter = self._register_single_value_hyperparameter("maxiter", accepted_types=[int])
18671893

18681894

1895+
class ArimaSettings(PredictionAlgorithmSettings):
1896+
def __init__(self, raw_settings, hyperparameter_search_params):
1897+
super(ArimaSettings, self).__init__(raw_settings, hyperparameter_search_params)
1898+
self.p = self._register_single_value_hyperparameter("p", accepted_types=[int])
1899+
self.d = self._register_single_value_hyperparameter("d", accepted_types=[int])
1900+
self.q = self._register_single_value_hyperparameter("q", accepted_types=[int])
1901+
self.P = self._register_single_value_hyperparameter("P", accepted_types=[int])
1902+
self.D = self._register_single_value_hyperparameter("D", accepted_types=[int])
1903+
self.Q = self._register_single_value_hyperparameter("Q", accepted_types=[int])
1904+
self.s = self._register_single_value_hyperparameter("s", accepted_types=[int])
1905+
self.trend = self._register_single_category_hyperparameter("trend", accepted_values=["n", "c", "t", "ct"])
1906+
self.trend_offset = self._register_single_value_hyperparameter("trend_offset", accepted_types=[int])
1907+
self.enforce_stationarity = self._register_single_value_hyperparameter("enforce_stationarity", accepted_types=[bool])
1908+
self.enforce_invertibility = self._register_single_value_hyperparameter("enforce_invertibility", accepted_types=[bool])
1909+
self.concentrate_scale = self._register_single_value_hyperparameter("concentrate_scale", accepted_types=[bool])
1910+
1911+
1912+
class CrostonSettings(PredictionAlgorithmSettings):
1913+
def __init__(self, raw_settings, hyperparameter_search_params):
1914+
super(CrostonSettings, self).__init__(raw_settings, hyperparameter_search_params)
1915+
self.variant = self._register_categorical_hyperparameter("variant")
1916+
self.alpha_d = self._register_numerical_hyperparameter("alpha_d")
1917+
self.alpha_p = self._register_numerical_hyperparameter("alpha_p")
1918+
1919+
1920+
class ETSSettings(PredictionAlgorithmSettings):
1921+
1922+
def __init__(self, raw_settings, hyperparameter_search_params):
1923+
super(ETSSettings, self).__init__(raw_settings, hyperparameter_search_params)
1924+
self.trend = self._register_categorical_hyperparameter("trend")
1925+
self.damped_trend = self._register_categorical_hyperparameter("damped_trend")
1926+
self.seasonal = self._register_categorical_hyperparameter("seasonal")
1927+
self.error = self._register_categorical_hyperparameter("error")
1928+
self.seasonal_periods = self._register_single_value_hyperparameter("seasonal_periods", accepted_types=[int])
1929+
self.include_unstable = self._register_single_value_hyperparameter("include_unstable", accepted_types=[bool])
1930+
self.seed = self._register_single_value_hyperparameter("seed", accepted_types=[int])
1931+
1932+
1933+
class NHITSSettings(PredictionAlgorithmSettings):
1934+
def __init__(self, raw_settings, hyperparameter_search_params):
1935+
super(NHITSSettings, self).__init__(raw_settings, hyperparameter_search_params)
1936+
self.context_length = self._register_numerical_hyperparameter("context_length")
1937+
self.learning_rate = self._register_numerical_hyperparameter("learning_rate")
1938+
self.batch_size = self._register_single_value_hyperparameter("batch_size", accepted_types=[int])
1939+
self.max_steps = self._register_single_value_hyperparameter("max_steps", accepted_types=[int])
1940+
self.patience = self._register_single_value_hyperparameter("patience", accepted_types=[int])
1941+
self.random_state = self._register_single_value_hyperparameter("random_state", accepted_types=[int])
1942+
1943+
1944+
class TFTSettings(PredictionAlgorithmSettings):
1945+
def __init__(self, raw_settings, hyperparameter_search_params):
1946+
super(TFTSettings, self).__init__(raw_settings, hyperparameter_search_params)
1947+
self.context_length = self._register_numerical_hyperparameter("context_length")
1948+
self.hidden_size_factor = self._register_numerical_hyperparameter("hidden_size_factor")
1949+
self.learning_rate = self._register_numerical_hyperparameter("learning_rate")
1950+
self.n_rnn_layers = self._register_numerical_hyperparameter("n_rnn_layers")
1951+
self.n_head = self._register_numerical_hyperparameter("n_head")
1952+
self.batch_size = self._register_single_value_hyperparameter("batch_size", accepted_types=[int])
1953+
self.max_steps = self._register_single_value_hyperparameter("max_steps", accepted_types=[int])
1954+
self.patience = self._register_single_value_hyperparameter("patience", accepted_types=[int])
1955+
self.random_state = self._register_single_value_hyperparameter("random_state", accepted_types=[int])
1956+
self.max_hidden_size = self._register_single_value_hyperparameter("max_hidden_size", accepted_types=[int])
1957+
self.limit_hidden_size = self._register_single_value_hyperparameter("limit_hidden_size", accepted_types=[bool])
1958+
1959+
18691960
class SeasonalLoessSettings(PredictionAlgorithmSettings):
18701961

18711962
def __init__(self, raw_settings, hyperparameter_search_params):
@@ -2377,6 +2468,15 @@ def get_algorithm_settings(self, algorithm_name):
23772468
class DSSTimeseriesForecastingMLTaskSettings(AbstractTabularPredictionMLTaskSettings):
23782469
__doc__ = []
23792470
_algorithm_remap = {
2471+
"ARIMA": PredictionAlgorithmMeta("arima_timeseries", ArimaSettings),
2472+
"CROSTON": PredictionAlgorithmMeta("croston_timeseries", CrostonSettings),
2473+
"ETS": PredictionAlgorithmMeta("ets_timeseries", ETSSettings),
2474+
"NHITS": PredictionAlgorithmMeta("nhits_timeseries", NHITSSettings),
2475+
"TFT": PredictionAlgorithmMeta("tft_timeseries", TFTSettings),
2476+
"RANDOM_FOREST_REGRESSION": PredictionAlgorithmMeta("random_forest_regression", TimeseriesRandomForestSettings),
2477+
"XGBOOST_REGRESSION": PredictionAlgorithmMeta("xgboost", TimeseriesXGBoostSettings),
2478+
"RIDGE_REGRESSION": PredictionAlgorithmMeta("ridge_regression", RidgeRegressionSettings),
2479+
"LIGHTGBM_REGRESSION": PredictionAlgorithmMeta("lightgbm_regression", TimeseriesLightGBMSettings),
23802480
"TRIVIAL_IDENTITY_TIMESERIES": PredictionAlgorithmMeta("trivial_identity_timeseries"),
23812481
"SEASONAL_NAIVE": PredictionAlgorithmMeta("seasonal_naive_timeseries", SeasonalNaiveSettings),
23822482
"AUTO_ARIMA": PredictionAlgorithmMeta("autoarima_timeseries", AutoArimaSettings),

0 commit comments

Comments
 (0)