Files
ragflow/internal/entity/skill_search.go
Yingfeng 4ee0702aed Feat: add skills space to context engine (#13908)
### What problem does this PR solve?

issue #13714

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
2026-04-30 12:36:03 +08:00

113 lines
4.6 KiB
Go

//
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
// 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 entity
import "time"
// FieldWeight represents the weight configuration for a field
type FieldWeight struct {
Enabled bool `json:"enabled"`
Weight float64 `json:"weight"`
}
// FieldConfig represents the field configuration for skill indexing
type FieldConfig struct {
Name FieldWeight `json:"name"`
Tags FieldWeight `json:"tags"`
Description FieldWeight `json:"description"`
Content FieldWeight `json:"content"`
}
// DefaultFieldConfig returns the default field configuration
func DefaultFieldConfig() FieldConfig {
return FieldConfig{
Name: FieldWeight{Enabled: true, Weight: 3.0},
Tags: FieldWeight{Enabled: true, Weight: 2.0},
Description: FieldWeight{Enabled: true, Weight: 1.0},
Content: FieldWeight{Enabled: false, Weight: 0.5},
}
}
// SkillSearchConfig represents the search configuration for skills
type SkillSearchConfig struct {
ID string `gorm:"column:id;primaryKey;size:32" json:"id"`
TenantID string `gorm:"column:tenant_id;size:32;not null;index" json:"tenant_id"`
SpaceID string `gorm:"column:space_id;size:128;not null;default:'default';index" json:"space_id"`
EmbdID string `gorm:"column:embd_id;size:128;not null" json:"embd_id"`
Status string `gorm:"column:status;size:1;default:1" json:"status"`
VectorSimilarityWeight float64 `gorm:"column:vector_similarity_weight;default:0.3" json:"vector_similarity_weight"`
SimilarityThreshold float64 `gorm:"column:similarity_threshold;default:0.2" json:"similarity_threshold"`
FieldConfig JSONMap `gorm:"column:field_config;type:json" json:"field_config"`
RerankID *string `gorm:"column:rerank_id;size:128" json:"rerank_id,omitempty"`
TenantRerankID *int64 `gorm:"column:tenant_rerank_id" json:"tenant_rerank_id,omitempty"`
TopK int64 `gorm:"column:top_k;default:10" json:"top_k"`
IndexVersion string `gorm:"column:index_version;size:32;default:'1.0.0'" json:"index_version"`
CreateTime *int64 `gorm:"column:create_time" json:"create_time,omitempty"`
UpdateTime *time.Time `gorm:"column:update_time" json:"update_time,omitempty"`
}
// TableName returns the table name for SkillSearchConfig model
func (SkillSearchConfig) TableName() string {
return "skill_search_configs"
}
// ToMap converts SkillSearchConfig to a map for JSON response
func (s *SkillSearchConfig) ToMap() map[string]interface{} {
result := map[string]interface{}{
"id": s.ID,
"tenant_id": s.TenantID,
"space_id": s.SpaceID,
"embd_id": s.EmbdID,
"vector_similarity_weight": s.VectorSimilarityWeight,
"similarity_threshold": s.SimilarityThreshold,
"field_config": s.FieldConfig,
"top_k": s.TopK,
"index_version": s.IndexVersion,
"status": s.Status,
}
if s.RerankID != nil {
result["rerank_id"] = *s.RerankID
}
if s.TenantRerankID != nil {
result["tenant_rerank_id"] = *s.TenantRerankID
}
if s.CreateTime != nil {
result["create_time"] = s.CreateTime
}
if s.UpdateTime != nil {
result["update_time"] = s.UpdateTime.Format("2006-01-02 15:04:05")
}
return result
}
// SkillSearchResult represents a skill search result
type SkillSearchResult struct {
SkillID string `json:"skill_id"`
FolderID string `json:"folder_id"` // File system folder ID for retrieving files
Name string `json:"name"`
Description string `json:"description"`
Tags []string `json:"tags"`
Score float64 `json:"score"`
BM25Score float64 `json:"bm25_score,omitempty"`
VectorScore float64 `json:"vector_score,omitempty"`
IndexVersion string `json:"index_version,omitempty"`
CreateTime int64 `json:"create_time,omitempty"`
Version string `json:"version,omitempty"` // Skill version from index
}