/
knowledgebase.go
112 lines (98 loc) · 2.94 KB
/
knowledgebase.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package v1alpha1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
)
const (
LabelKnowledgeBaseType = Group + "/knowledgebase-type"
)
type KnowledgeBaseType string
const (
KnowledgeBaseTypeNormal KnowledgeBaseType = "normal"
KnowledgeBaseTypeConversation KnowledgeBaseType = "conversation"
)
func (kb *KnowledgeBase) IsTypeConversation() bool {
return kb.Spec.Type == KnowledgeBaseTypeConversation
}
const (
// UpdateSourceFileAnnotationKey is the key of the update source file annotation
UpdateSourceFileAnnotationKey = Group + "/update-source-file-time"
DefaultChunkSize = 300
DefaultChunkOverlap = 10
DefaultBatchSize = 10
)
func (kb *KnowledgeBase) EmbeddingOptions() EmbeddingOptions {
options := kb.Spec.EmbeddingOptions
if kb.Spec.EmbeddingOptions.ChunkSize == 0 {
options.ChunkSize = DefaultChunkSize
}
if kb.Spec.EmbeddingOptions.ChunkOverlap == nil {
options.ChunkOverlap = pointer.IntPtr(DefaultChunkOverlap)
}
if kb.Spec.EmbeddingOptions.BatchSize == 0 {
options.BatchSize = DefaultBatchSize
}
return options
}
func (kb *KnowledgeBase) VectorStoreCollectionName() string {
return kb.Namespace + "_" + kb.Name
}
func (kb *KnowledgeBase) InitCondition() Condition {
return Condition{
Type: TypeReady,
Status: corev1.ConditionUnknown,
Reason: "Init",
Message: "KnowledgeBase - embedding in progress",
LastTransitionTime: metav1.Now(),
LastSuccessfulTime: metav1.Now(),
}
}
func (kb *KnowledgeBase) PendingCondition(msg string) Condition {
return Condition{
Type: TypeReady,
Status: corev1.ConditionFalse,
Reason: "Pending",
Message: msg,
LastTransitionTime: metav1.Now(),
LastSuccessfulTime: metav1.Now(),
}
}
func (kb *KnowledgeBase) ErrorCondition(msg string) Condition {
return Condition{
Type: TypeReady,
Status: corev1.ConditionFalse,
Reason: "Error",
Message: msg,
LastTransitionTime: metav1.Now(),
LastSuccessfulTime: metav1.Now(),
}
}
func (kb *KnowledgeBase) ReadyCondition() Condition {
return Condition{
Type: TypeReady,
Status: corev1.ConditionTrue,
LastTransitionTime: metav1.Now(),
LastSuccessfulTime: metav1.Now(),
Message: "Success",
}
}
func (f *FileDetails) UpdateErr(err error, phase FileProcessPhase) {
f.LastUpdateTime = metav1.Now()
f.Phase = phase
if err != nil {
f.ErrMessage = err.Error()
} else {
f.ErrMessage = ""
}
}
func (f *FileGroupDetail) Init(group FileGroup) {
f.Source = group.Source.DeepCopy()
f.FileDetails = make([]FileDetails, len(group.Files))
for i := range group.Files {
f.FileDetails[i].Path = group.Files[i].Path
f.FileDetails[i].Version = group.Files[i].Version
f.FileDetails[i].Phase = FileProcessPhasePending
f.FileDetails[i].LastUpdateTime = metav1.Now()
}
}