From 861e50ce2dee05c37ff42c323a60601fef10a0e3 Mon Sep 17 00:00:00 2001 From: Yongzao <532741407@qq.com> Date: Mon, 25 May 2026 22:34:44 +0800 Subject: [PATCH] Fix AINode inference output type --- .../org/apache/iotdb/ainode/it/AINodeSharedClusterIT.java | 5 +++++ .../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 1686e916ff0b7..4ea2b4af41acc 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.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 static void callInferenceTest(Statement statement, AINodeTestUtils.FakeMo 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 static void callInferenceByDefaultTest( 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 8dcf03627dd49..1f1bd083f26fb 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 @@ def _do_inference_and_construct_resp( 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