001/*
002 *  Copyright (c) 2023-2026, Agents-Flex (fuhai999@gmail.com).
003 *  <p>
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *  <p>
008 *  http://www.apache.org/licenses/LICENSE-2.0
009 *  <p>
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package com.agentsflex.core.store;
017
018import com.agentsflex.core.util.Metadata;
019
020import java.util.ArrayList;
021import java.util.Arrays;
022import java.util.Collection;
023import java.util.List;
024
025
026public class VectorData extends Metadata {
027
028    private float[] vector;
029
030    /**
031     * 0 ~ 1, 数值越大,相似度越高
032     */
033    private Double score;
034
035    public float[] getVector() {
036        return vector;
037    }
038
039    public List<Float> getVectorAsList() {
040        if (vector == null) {
041            return null;
042        }
043        List<Float> result = new ArrayList<>(vector.length);
044        for (float v : vector) {
045            result.add(v);
046        }
047        return result;
048    }
049
050    public List<Double> getVectorAsDoubleList() {
051        if (vector == null) {
052            return null;
053        }
054        List<Double> result = new ArrayList<>(vector.length);
055        for (float v : vector) {
056            result.add((double) v);
057        }
058        return result;
059    }
060
061    public double[] getVectorAsDoubleArray() {
062        if (vector == null) {
063            return null;
064        }
065        double[] result = new double[vector.length];
066        for (int i = 0; i < vector.length; i++) {
067            result[i] = vector[i];
068        }
069        return result;
070    }
071
072
073    public void setVector(float[] vector) {
074        this.vector = vector;
075    }
076
077    public void setVector(Float[] vector) {
078        this.vector = new float[vector.length];
079        for (int i = 0; i < vector.length; i++) {
080            this.vector[i] = vector[i];
081        }
082    }
083
084    public void setVector(double[] vector) {
085        this.vector = new float[vector.length];
086        for (int i = 0; i < vector.length; i++) {
087            this.vector[i] = (float) vector[i];
088        }
089    }
090
091    public void setVector(Double[] vector) {
092        this.vector = new float[vector.length];
093        for (int i = 0; i < vector.length; i++) {
094            this.vector[i] = vector[i].floatValue();
095        }
096    }
097
098    public void setVector(Collection<? extends Number> vector) {
099        this.vector = new float[vector.size()];
100        int index = 0;
101        for (Number num : vector) {
102            this.vector[index++] = num.floatValue();
103        }
104    }
105
106    public Double getScore() {
107        return score;
108    }
109
110    public void setScore(Double score) {
111        this.score = score;
112    }
113
114    @Override
115    public String toString() {
116        return "VectorData{" +
117            "vector=" + Arrays.toString(vector) +
118            ", score=" + score +
119            ", metadataMap=" + metadataMap +
120            '}';
121    }
122}