use std::sync::Arc;
use arrow::datatypes::{DataType, Field, Schema, SchemaRef};
pub fn ml_classification_output_schema(id_type: DataType) -> SchemaRef {
prediction_schema(
id_type,
[Field::new("prediction", DataType::Int32, false), Field::new("probability", DataType::Float32, false)],
)
}
pub fn ml_regression_output_schema(id_type: DataType) -> SchemaRef {
prediction_schema(id_type, [Field::new("prediction", DataType::Float32, false)])
}
fn prediction_schema<const N: usize>(id_type: DataType, outputs: [Field; N]) -> SchemaRef {
let mut fields = vec![Field::new("row_ordinal", DataType::UInt64, false), Field::new("id", id_type, false)];
fields.extend(outputs);
Arc::new(Schema::new(fields))
}
pub fn ml_hdbscan_output_schema(id_type: DataType) -> SchemaRef {
Arc::new(Schema::new(vec![
Field::new("row_ordinal", DataType::UInt64, false),
Field::new("id", id_type, false),
Field::new("cluster_id", DataType::Int64, false),
Field::new("probability", DataType::Float32, false),
]))
}
pub fn ml_embedding_output_schema(id_type: DataType, n_components: usize) -> SchemaRef {
let mut fields = vec![Field::new("row_ordinal", DataType::UInt64, false), Field::new("id", id_type, false)];
fields.extend((0..n_components).map(|index| Field::new(format!("dim_{index}"), DataType::Float32, false)));
Arc::new(Schema::new(fields))
}