refactor(runtime): update function signatures to use value receivers for models

This commit is contained in:
mlogclub
2026-04-19 11:38:05 +08:00
parent 680793f527
commit 3e98e9379c
9 changed files with 107 additions and 95 deletions
+2 -5
View File
@@ -54,7 +54,7 @@ func (s *index) IndexDocumentByID(ctx context.Context, documentID int64) error {
return s.IndexDocument(ctx, document)
}
func (s *index) IndexDocument(ctx context.Context, document *models.KnowledgeDocument) error {
func (s *index) IndexDocument(ctx context.Context, document models.KnowledgeDocument) error {
start := time.Now()
if err := s.markDocumentIndexPending(document.ID); err != nil {
slog.Error("Failed to mark knowledge document index as pending", "document_id", document.ID, "error", err)
@@ -302,10 +302,7 @@ func (s *index) RebuildKnowledgeBaseIndex(ctx context.Context, knowledgeBaseID i
return nil
}
func buildFAQChunkContent(faq *models.KnowledgeFAQ) string {
if faq == nil {
return ""
}
func buildFAQChunkContent(faq models.KnowledgeFAQ) string {
parts := []string{fmt.Sprintf("问题:%s", faq.Question)}
var similarQuestions []string
if faq.SimilarQuestions != "" {
+3 -3
View File
@@ -15,7 +15,7 @@ import (
"github.com/mlogclub/simple/common/strs"
)
func (s *index) buildDocumentChunkRequest(document *models.KnowledgeDocument, knowledgeBase *models.KnowledgeBase) *ragchunk.ChunkRequest {
func (s *index) buildDocumentChunkRequest(document models.KnowledgeDocument, knowledgeBase models.KnowledgeBase) *ragchunk.ChunkRequest {
return &ragchunk.ChunkRequest{
KnowledgeBaseID: document.KnowledgeBaseID,
DocumentID: document.ID,
@@ -33,7 +33,7 @@ func (s *index) buildDocumentChunkRequest(document *models.KnowledgeDocument, kn
}
}
func (s *index) buildDocumentChunks(ctx context.Context, document *models.KnowledgeDocument, knowledgeBase *models.KnowledgeBase) ([]ragchunk.ChunkResult, error) {
func (s *index) buildDocumentChunks(ctx context.Context, document models.KnowledgeDocument, knowledgeBase models.KnowledgeBase) ([]ragchunk.ChunkResult, error) {
chunks, err := s.registry.Chunk(ctx, s.buildDocumentChunkRequest(document, knowledgeBase))
if err != nil {
return nil, fmt.Errorf("failed to chunk document: %w", err)
@@ -54,7 +54,7 @@ func collectExistingVectorIDs(chunks []models.KnowledgeChunk) []string {
return ret
}
func (s *index) prepareDocumentVectors(ctx context.Context, knowledgeBase *models.KnowledgeBase, document *models.KnowledgeDocument, chunks []ragchunk.ChunkResult) ([]vectordb.Vector, []models.KnowledgeChunk, int, error) {
func (s *index) prepareDocumentVectors(ctx context.Context, knowledgeBase models.KnowledgeBase, document models.KnowledgeDocument, chunks []ragchunk.ChunkResult) ([]vectordb.Vector, []models.KnowledgeChunk, int, error) {
vectors := make([]vectordb.Vector, 0, len(chunks))
chunkModels := make([]models.KnowledgeChunk, 0, len(chunks))
dimension := 0
+2 -2
View File
@@ -11,7 +11,7 @@ import (
"cs-agent/internal/pkg/enums"
)
func buildFAQChunkModel(knowledgeBase *models.KnowledgeBase, faq *models.KnowledgeFAQ, content string) (models.KnowledgeChunk, string) {
func buildFAQChunkModel(knowledgeBase models.KnowledgeBase, faq models.KnowledgeFAQ, content string) (models.KnowledgeChunk, string) {
chunkID := buildKnowledgeFAQChunkVectorID(knowledgeBase.ID, faq.ID, 0)
now := time.Now()
return models.KnowledgeChunk{
@@ -32,7 +32,7 @@ func buildFAQChunkModel(knowledgeBase *models.KnowledgeBase, faq *models.Knowled
}, chunkID
}
func (s *index) prepareFAQVector(ctx context.Context, knowledgeBase *models.KnowledgeBase, faq *models.KnowledgeFAQ, content string) (vectordb.Vector, models.KnowledgeChunk, int, error) {
func (s *index) prepareFAQVector(ctx context.Context, knowledgeBase models.KnowledgeBase, faq models.KnowledgeFAQ, content string) (vectordb.Vector, models.KnowledgeChunk, int, error) {
embeddingResult, err := ai.Embedding.GenerateEmbedding(ctx, content)
if err != nil {
return vectordb.Vector{}, models.KnowledgeChunk{}, 0, fmt.Errorf("failed to generate embedding for faq %d: %w", faq.ID, err)
+13 -19
View File
@@ -10,43 +10,37 @@ import (
"github.com/mlogclub/simple/sqls"
)
func (s *index) loadDocumentByID(documentID int64) (*models.KnowledgeDocument, error) {
func (s *index) loadDocumentByID(documentID int64) (models.KnowledgeDocument, error) {
document := repositories.KnowledgeDocumentRepository.Get(sqls.DB(), documentID)
if document == nil {
return nil, fmt.Errorf("document not found: %d", documentID)
return models.KnowledgeDocument{}, fmt.Errorf("document not found: %d", documentID)
}
return document, nil
return *document, nil
}
func (s *index) loadFAQByID(faqID int64) (*models.KnowledgeFAQ, error) {
func (s *index) loadFAQByID(faqID int64) (models.KnowledgeFAQ, error) {
faq := repositories.KnowledgeFAQRepository.Get(sqls.DB(), faqID)
if faq == nil {
return nil, fmt.Errorf("faq not found: %d", faqID)
return models.KnowledgeFAQ{}, fmt.Errorf("faq not found: %d", faqID)
}
return faq, nil
return *faq, nil
}
func (s *index) loadDocumentKnowledgeBase(document *models.KnowledgeDocument) (*models.KnowledgeBase, error) {
if document == nil {
return nil, fmt.Errorf("document is nil")
}
func (s *index) loadDocumentKnowledgeBase(document models.KnowledgeDocument) (models.KnowledgeBase, error) {
knowledgeBase := repositories.KnowledgeBaseRepository.Get(sqls.DB(), document.KnowledgeBaseID)
if knowledgeBase == nil {
return nil, fmt.Errorf("knowledge base not found: %d", document.KnowledgeBaseID)
return models.KnowledgeBase{}, fmt.Errorf("knowledge base not found: %d", document.KnowledgeBaseID)
}
return knowledgeBase, nil
return *knowledgeBase, nil
}
func (s *index) loadFAQKnowledgeBase(faq *models.KnowledgeFAQ) (*models.KnowledgeBase, error) {
if faq == nil {
return nil, fmt.Errorf("faq is nil")
}
func (s *index) loadFAQKnowledgeBase(faq models.KnowledgeFAQ) (models.KnowledgeBase, error) {
knowledgeBase := repositories.KnowledgeBaseRepository.Get(sqls.DB(), faq.KnowledgeBaseID)
if knowledgeBase == nil {
return nil, fmt.Errorf("knowledge base not found: %d", faq.KnowledgeBaseID)
return models.KnowledgeBase{}, fmt.Errorf("knowledge base not found: %d", faq.KnowledgeBaseID)
}
if knowledgeBase.KnowledgeType != string(enums.KnowledgeBaseTypeFAQ) {
return nil, fmt.Errorf("knowledge base %d is not faq type", knowledgeBase.ID)
return models.KnowledgeBase{}, fmt.Errorf("knowledge base %d is not faq type", knowledgeBase.ID)
}
return knowledgeBase, nil
return *knowledgeBase, nil
}
@@ -8,7 +8,7 @@ import (
)
func TestBuildFAQChunkContent(t *testing.T) {
faq := &models.KnowledgeFAQ{
faq := models.KnowledgeFAQ{
Question: "如何退款",
SimilarQuestions: `["退款怎么申请","申请售后"]`,
Answer: "在订单页发起退款。",
@@ -27,8 +27,8 @@ func TestBuildFAQChunkContent(t *testing.T) {
}
func TestBuildFAQChunkModel(t *testing.T) {
knowledgeBase := &models.KnowledgeBase{ID: 11}
faq := &models.KnowledgeFAQ{ID: 22, Question: "如何退款"}
knowledgeBase := models.KnowledgeBase{ID: 11}
faq := models.KnowledgeFAQ{ID: 22, Question: "如何退款"}
chunk, chunkID := buildFAQChunkModel(knowledgeBase, faq, "问题:如何退款\n回答:在订单页发起退款。")
if chunkID == "" {
+2 -2
View File
@@ -13,7 +13,7 @@ import (
"github.com/mlogclub/simple/sqls"
)
func (s *index) runDocumentIndex(ctx context.Context, document *models.KnowledgeDocument, knowledgeBase *models.KnowledgeBase) ([]vectordb.Vector, int, error) {
func (s *index) runDocumentIndex(ctx context.Context, document models.KnowledgeDocument, knowledgeBase models.KnowledgeBase) ([]vectordb.Vector, int, error) {
existingChunks := repositories.KnowledgeChunkRepository.FindByDocumentID(sqls.DB(), document.ID)
chunks, err := s.buildDocumentChunks(ctx, document, knowledgeBase)
if err != nil {
@@ -51,7 +51,7 @@ func (s *index) runDocumentIndex(ctx context.Context, document *models.Knowledge
return vectors, len(chunks), nil
}
func (s *index) runFAQIndex(ctx context.Context, faq *models.KnowledgeFAQ, knowledgeBase *models.KnowledgeBase) error {
func (s *index) runFAQIndex(ctx context.Context, faq models.KnowledgeFAQ, knowledgeBase models.KnowledgeBase) error {
existingChunks := repositories.KnowledgeChunkRepository.FindByFaqID(sqls.DB(), faq.ID)
content := buildFAQChunkContent(faq)
if content == "" {