123 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
|  * Copyright 2025 coze-dev Authors
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| package vikingdb
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/volcengine/volc-sdk-golang/service/vikingdb"
 | |
| 
 | |
| 	embcontract "github.com/coze-dev/coze-studio/backend/infra/contract/embedding"
 | |
| 	"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
 | |
| )
 | |
| 
 | |
| type VikingEmbeddingModelName string
 | |
| 
 | |
| const (
 | |
| 	ModelNameDoubaoEmbedding       VikingEmbeddingModelName = "doubao-embedding"
 | |
| 	ModelNameDoubaoEmbeddingLarge  VikingEmbeddingModelName = "doubao-embedding-large"
 | |
| 	ModelNameDoubaoEmbeddingVision VikingEmbeddingModelName = "doubao-embedding-vision"
 | |
| 	ModelNameBGELargeZH            VikingEmbeddingModelName = "bge-large-zh"
 | |
| 	ModelNameBGEM3                 VikingEmbeddingModelName = "bge-m3"
 | |
| 	ModelNameBGEVisualizedM3       VikingEmbeddingModelName = "bge-visualized-m3"
 | |
| 
 | |
| 	//ModelNameDoubaoEmbeddingAndM3      VikingEmbeddingModelName = "doubao-embedding-and-m3"
 | |
| 	//ModelNameDoubaoEmbeddingLargeAndM3 VikingEmbeddingModelName = "doubao-embedding-large-and-m3"
 | |
| 	//ModelNameBGELargeZHAndM3           VikingEmbeddingModelName = "bge-large-zh-and-m3"
 | |
| )
 | |
| 
 | |
| func (v VikingEmbeddingModelName) Dimensions() int64 {
 | |
| 	switch v {
 | |
| 	case ModelNameDoubaoEmbedding, ModelNameDoubaoEmbeddingVision:
 | |
| 		return 2048
 | |
| 	case ModelNameDoubaoEmbeddingLarge:
 | |
| 		return 4096
 | |
| 	case ModelNameBGELargeZH, ModelNameBGEM3, ModelNameBGEVisualizedM3:
 | |
| 		return 1024
 | |
| 	default:
 | |
| 		return 0
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (v VikingEmbeddingModelName) ModelVersion() *string {
 | |
| 	switch v {
 | |
| 	case ModelNameDoubaoEmbedding:
 | |
| 		return ptr.Of("240515")
 | |
| 	case ModelNameDoubaoEmbeddingLarge:
 | |
| 		return ptr.Of("240915")
 | |
| 	case ModelNameDoubaoEmbeddingVision:
 | |
| 		return ptr.Of("250328")
 | |
| 	default:
 | |
| 		return nil
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (v VikingEmbeddingModelName) SupportStatus() embcontract.SupportStatus {
 | |
| 	switch v {
 | |
| 	case ModelNameDoubaoEmbedding, ModelNameDoubaoEmbeddingLarge, ModelNameDoubaoEmbeddingVision, ModelNameBGELargeZH, ModelNameBGEVisualizedM3:
 | |
| 		return embcontract.SupportDense
 | |
| 	case ModelNameBGEM3:
 | |
| 		return embcontract.SupportDenseAndSparse
 | |
| 	default:
 | |
| 		return embcontract.SupportDense
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type IndexType string
 | |
| 
 | |
| const (
 | |
| 	IndexTypeHNSW       IndexType = vikingdb.HNSW
 | |
| 	IndexTypeHNSWHybrid IndexType = vikingdb.HNSW_HYBRID
 | |
| 	IndexTypeFlat       IndexType = vikingdb.FLAT
 | |
| 	IndexTypeIVF        IndexType = vikingdb.IVF
 | |
| 	IndexTypeDiskANN    IndexType = vikingdb.DiskANN
 | |
| )
 | |
| 
 | |
| type IndexDistance string
 | |
| 
 | |
| const (
 | |
| 	IndexDistanceIP     IndexDistance = vikingdb.IP
 | |
| 	IndexDistanceL2     IndexDistance = vikingdb.L2
 | |
| 	IndexDistanceCosine IndexDistance = vikingdb.COSINE
 | |
| )
 | |
| 
 | |
| type IndexQuant string
 | |
| 
 | |
| const (
 | |
| 	IndexQuantInt8  IndexQuant = vikingdb.Int8
 | |
| 	IndexQuantFloat IndexQuant = vikingdb.Float
 | |
| 	IndexQuantFix16 IndexQuant = vikingdb.Fix16
 | |
| 	IndexQuantPQ    IndexQuant = vikingdb.PQ
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	vikingEmbeddingUseDense           = "return_dense"
 | |
| 	vikingEmbeddingUseSparse          = "return_sparse"
 | |
| 	vikingEmbeddingRespSentenceDense  = "sentence_dense_embedding"
 | |
| 	vikingEmbeddingRespSentenceSparse = "sentence_sparse_embedding"
 | |
| 	vikingIndexName                   = "opencoze_index"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	errCollectionNotFound = "collection not found"
 | |
| 	errIndexNotFound      = "index not found"
 | |
| )
 | |
| 
 | |
| func denseFieldName(name string) string {
 | |
| 	return fmt.Sprintf("dense_%s", name)
 | |
| }
 |