This is an automated email from the ASF dual-hosted git repository. CRZbulabula pushed a commit to branch fix-ainode-inference-double-output in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 861e50ce2dee05c37ff42c323a60601fef10a0e3 Author: Yongzao <[email protected]> AuthorDate: Mon May 25 22:34:44 2026 +0800 Fix AINode inference output type --- .../java/org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java | 5 +++++ iotdb-core/ainode/iotdb/ainode/core/manager/inference_manager.py | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java b/integration-test/src/test/java/org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java index 1686e916ff0..4ea2b4af41a 100644 --- a/integration-test/src/test/java/org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java @@ -42,6 +42,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; +import java.sql.Types; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; @@ -271,8 +272,10 @@ public class AINodeSharedClusterIT { try (ResultSet resultSet = statement.executeQuery(callInferenceSQL)) { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); checkHeader(resultSetMetaData, "Time,output"); + Assert.assertEquals(Types.DOUBLE, resultSetMetaData.getColumnType(2)); int count = 0; while (resultSet.next()) { + resultSet.getDouble("output"); count++; } Assert.assertEquals(DEFAULT_OUTPUT_LENGTH, count); @@ -288,8 +291,10 @@ public class AINodeSharedClusterIT { try (ResultSet resultSet = statement.executeQuery(callInferenceSQL)) { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); checkHeader(resultSetMetaData, "output"); + Assert.assertEquals(Types.DOUBLE, resultSetMetaData.getColumnType(1)); int count = 0; while (resultSet.next()) { + resultSet.getDouble("output"); count++; } Assert.assertTrue(count > 0); diff --git a/iotdb-core/ainode/iotdb/ainode/core/manager/inference_manager.py b/iotdb-core/ainode/iotdb/ainode/core/manager/inference_manager.py index 8dcf03627dd..1f1bd083f26 100644 --- a/iotdb-core/ainode/iotdb/ainode/core/manager/inference_manager.py +++ b/iotdb-core/ainode/iotdb/ainode/core/manager/inference_manager.py @@ -209,10 +209,11 @@ class InferenceManager: logger.error("[Inference] Unsupported pipeline type.") outputs = inference_pipeline.postprocess(outputs, **inference_attrs) - # convert tensor into tsblock for the output in each batch + # DataNode currently exposes inference outputs as DOUBLE, so serialize the + # physical TsBlock column as double even when model tensors are float32. resp_list = [] - for batch_idx, output in enumerate(outputs): - resp = convert_tensor_to_tsblock(output) + for output in outputs: + resp = convert_tensor_to_tsblock(output.to(dtype=torch.float64)) resp_list.append(resp) return resp_list
