diff --git a/internal/entity/models/types.go b/internal/entity/models/types.go index 0043bef41..30c3c8cec 100644 --- a/internal/entity/models/types.go +++ b/internal/entity/models/types.go @@ -76,12 +76,12 @@ type EmbeddingConfig struct { // EmbeddingModel wraps a ModelDriver with embedding-specific configuration type EmbeddingModel struct { ModelDriver ModelDriver - ModelName string + ModelName *string APIConfig *APIConfig } // NewEmbeddingModel creates a new EmbeddingModel -func NewEmbeddingModel(driver ModelDriver, modelName string, apiConfig *APIConfig) *EmbeddingModel { +func NewEmbeddingModel(driver ModelDriver, modelName *string, apiConfig *APIConfig) *EmbeddingModel { return &EmbeddingModel{ ModelDriver: driver, ModelName: modelName, @@ -109,12 +109,12 @@ func (e *EmbeddingModel) EncodeQuery(modelName *string, query string, apiConfig // RerankModel wraps a ModelDriver with rerank-specific configuration type RerankModel struct { ModelDriver ModelDriver - ModelName string + ModelName *string APIConfig *APIConfig } // NewRerankModel creates a new RerankModel -func NewRerankModel(driver ModelDriver, modelName string, apiConfig *APIConfig) *RerankModel { +func NewRerankModel(driver ModelDriver, modelName *string, apiConfig *APIConfig) *RerankModel { return &RerankModel{ ModelDriver: driver, ModelName: modelName, @@ -124,18 +124,18 @@ func NewRerankModel(driver ModelDriver, modelName string, apiConfig *APIConfig) // Rerank calculates similarity between query and texts func (r *RerankModel) Rerank(query string, texts []string, apiConfig *APIConfig) ([]float64, error) { - return r.ModelDriver.Rerank(&r.ModelName, query, texts, apiConfig) + return r.ModelDriver.Rerank(r.ModelName, query, texts, apiConfig) } // ChatModel wraps a ModelDriver with chat-specific configuration type ChatModel struct { ModelDriver ModelDriver - ModelName string + ModelName *string APIConfig *APIConfig } // NewChatModel creates a new ChatModel -func NewChatModel(driver ModelDriver, modelName string, apiConfig *APIConfig) *ChatModel { +func NewChatModel(driver ModelDriver, modelName *string, apiConfig *APIConfig) *ChatModel { return &ChatModel{ ModelDriver: driver, ModelName: modelName, diff --git a/internal/entity/models/volcengine.go b/internal/entity/models/volcengine.go index cfe84296b..044b21c0e 100644 --- a/internal/entity/models/volcengine.go +++ b/internal/entity/models/volcengine.go @@ -71,6 +71,21 @@ func (z *VolcEngine) EncodeToEmbedding(modelName *string, texts []string, apiCon return nil, fmt.Errorf("not implemented") } +// Encode encodes a list of texts into embeddings (convenience method) +func (z *VolcEngine) Encode(modelName *string, texts []string, apiConfig *APIConfig) ([][]float64, error) { + return nil, fmt.Errorf("%s, Encode not implemented", z.Name()) +} + +// EncodeQuery encodes a single query string into embedding (convenience method) +func (z *VolcEngine) EncodeQuery(modelName *string, query string, apiConfig *APIConfig) ([]float64, error) { + return nil, fmt.Errorf("%s, EncodeQuery not implemented", z.Name()) +} + +// Rerank calculates similarity scores between query and texts +func (z *VolcEngine) Rerank(modelName *string, query string, texts []string, apiConfig *APIConfig) ([]float64, error) { + return nil, fmt.Errorf("%s, Rerank not implemented", z.Name()) +} + func (z *VolcEngine) ListModels(apiConfig *APIConfig) ([]string, error) { return nil, fmt.Errorf("%s, no such method", z.Name()) } diff --git a/internal/service/model_service.go b/internal/service/model_service.go index 902bc75d3..97686a94e 100644 --- a/internal/service/model_service.go +++ b/internal/service/model_service.go @@ -667,28 +667,6 @@ func (m *ModelProviderService) ChatToModel(providerName, instanceName, modelName return nil, common.CodeServerError, errors.New("model is disabled") } -func (m *ModelProviderService) ChatToModelByApiKey(providerName, modelName, apiKey, message string) (*string, common.ErrorCode, error) { - providerInfo := dao.GetModelProviderManager().FindProvider(providerName) - if providerInfo == nil { - return nil, common.CodeNotFound, errors.New("provider not found") - } - - _, err := dao.GetModelProviderManager().GetModelByName(providerName, modelName) - if err != nil { - return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s not found", providerName, modelName)) - } - - var apiConfig = &modelModule.APIConfig{} - apiConfig.ApiKey = &apiKey - var response *modelModule.ChatResponse - response, err = providerInfo.ModelDriver.Chat(&modelName, &message, apiConfig, nil) - if err != nil { - return nil, common.CodeServerError, err - } - - return response.Answer, common.CodeSuccess, nil -} - // ChatWithMessagesToModelByApiKey sends multiple messages with roles and returns response func (m *ModelProviderService) ChatWithMessagesToModelByApiKey(providerName, modelName, apiKey string, messages []modelModule.Message) (*string, common.ErrorCode, error) { providerInfo := dao.GetModelProviderManager().FindProvider(providerName) @@ -847,7 +825,7 @@ func (m *ModelProviderService) GetEmbeddingModel(tenantID, compositeModelName st if err != nil { return nil, err } - return modelModule.NewEmbeddingModel(driver, modelName, apiConfig), nil + return modelModule.NewEmbeddingModel(driver, &modelName, apiConfig), nil } // GetRerankModel returns a RerankModel wrapper for the given tenant @@ -856,7 +834,7 @@ func (m *ModelProviderService) GetRerankModel(tenantID, compositeModelName strin if err != nil { return nil, err } - return modelModule.NewRerankModel(driver, modelName, apiConfig), nil + return modelModule.NewRerankModel(driver, &modelName, apiConfig), nil } // GetChatModel returns a ChatModel wrapper for the given tenant @@ -865,7 +843,7 @@ func (m *ModelProviderService) GetChatModel(tenantID, compositeModelName string) if err != nil { return nil, err } - return modelModule.NewChatModel(driver, modelName, apiConfig), nil + return modelModule.NewChatModel(driver, &modelName, apiConfig), nil } // getModelConfig returns the model driver, model name, and API config for a model diff --git a/internal/service/nlp/reranker.go b/internal/service/nlp/reranker.go index fab55987a..25abf5ff5 100644 --- a/internal/service/nlp/reranker.go +++ b/internal/service/nlp/reranker.go @@ -136,7 +136,7 @@ func RerankByModel( tsim = TokenSimilarity(keywords, insTw, qb) // Get similarity scores from reranker model - modelSim, err := rerankModel.ModelDriver.Rerank(&rerankModel.ModelName, query, docs, rerankModel.APIConfig) + modelSim, err := rerankModel.ModelDriver.Rerank(rerankModel.ModelName, query, docs, rerankModel.APIConfig) if err != nil { logger.Error("RerankByModel: rerankModel.Rerank failed; falling back to token-only similarity", err) // If model fails, fall back to token similarity only diff --git a/internal/service/nlp/retrieval.go b/internal/service/nlp/retrieval.go index 76f6d7d7f..a03339a38 100644 --- a/internal/service/nlp/retrieval.go +++ b/internal/service/nlp/retrieval.go @@ -597,7 +597,7 @@ func (s *RetrievalService) Search(ctx context.Context, req *RetrievalSearchReque // GetVector computes query vector and returns MatchDenseExpr for hybrid search func (s *RetrievalService) GetVector(txt string, embModel *models.EmbeddingModel, topk int, similarity float64) (*types.MatchDenseExpr, error) { - vector, err := embModel.ModelDriver.EncodeQuery(&embModel.ModelName, txt, embModel.APIConfig) + vector, err := embModel.ModelDriver.EncodeQuery(embModel.ModelName, txt, embModel.APIConfig) if err != nil { return nil, err }