| 3667 | } |
| 3668 | |
| 3669 | func hybridVectorBlob(v Vector) (interface{}, error) { |
| 3670 | if v == nil { |
| 3671 | return nil, fmt.Errorf("FT.HYBRID: vector data is required") |
| 3672 | } |
| 3673 | |
| 3674 | switch vector := v.(type) { |
| 3675 | case *VectorFP32: |
| 3676 | return hybridVectorBytes(vector.Val) |
| 3677 | case *VectorFloat16: |
| 3678 | return hybridVectorBytes(vector.Val) |
| 3679 | case *VectorBFloat16: |
| 3680 | return hybridVectorBytes(vector.Val) |
| 3681 | case *VectorFloat64: |
| 3682 | return hybridVectorBytes(vector.Val) |
| 3683 | case *VectorInt8: |
| 3684 | return hybridVectorBytes(vector.Val) |
| 3685 | case *VectorUint8: |
| 3686 | return hybridVectorBytes(vector.Val) |
| 3687 | case *VectorValues, *VectorRef: |
| 3688 | return nil, fmt.Errorf("FT.HYBRID: unsupported vector type %T", v) |
| 3689 | default: |
| 3690 | values := v.Value() |
| 3691 | if len(values) < 2 { |
| 3692 | return nil, fmt.Errorf("FT.HYBRID: vector Value must contain a blob at index 1") |
| 3693 | } |
| 3694 | return values[1], nil |
| 3695 | } |
| 3696 | } |
| 3697 | |
| 3698 | func hybridVectorBytes(blob []byte) ([]byte, error) { |
| 3699 | if len(blob) == 0 { |