Skip to content

Commit 69b3caf

Browse files
refactor: address PR feedback
1 parent 0b77465 commit 69b3caf

File tree

1 file changed

+44
-88
lines changed

1 file changed

+44
-88
lines changed

examples/memory/kb.go

Lines changed: 44 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (fs *fileStore) Read() ([]byte, error) {
4747
data, err := os.ReadFile(fs.path)
4848
if err != nil {
4949
if os.IsNotExist(err) {
50-
return []byte{}, nil
50+
return nil, nil
5151
}
5252
return nil, fmt.Errorf("failed to read file %s: %w", fs.path, err)
5353
}
@@ -98,10 +98,7 @@ func (k knowledgeBase) loadGraph() (KnowledgeGraph, error) {
9898
return KnowledgeGraph{}, fmt.Errorf("failed to unmarshal from store: %w", err)
9999
}
100100

101-
graph := KnowledgeGraph{
102-
Entities: []Entity{},
103-
Relations: []Relation{},
104-
}
101+
graph := KnowledgeGraph{}
105102

106103
for _, item := range items {
107104
switch item.Type {
@@ -157,6 +154,7 @@ func (k knowledgeBase) saveGraph(graph KnowledgeGraph) error {
157154
}
158155

159156
// createEntities adds new entities to the graph, skipping duplicates by name.
157+
// Returns the new entities that were actually added.
160158
func (k knowledgeBase) createEntities(entities []Entity) ([]Entity, error) {
161159
graph, err := k.loadGraph()
162160
if err != nil {
@@ -165,15 +163,7 @@ func (k knowledgeBase) createEntities(entities []Entity) ([]Entity, error) {
165163

166164
var newEntities []Entity
167165
for _, entity := range entities {
168-
exists := false
169-
for _, existingEntity := range graph.Entities {
170-
if existingEntity.Name == entity.Name {
171-
exists = true
172-
break
173-
}
174-
}
175-
176-
if !exists {
166+
if !slices.ContainsFunc(graph.Entities, func(e Entity) bool { return e.Name == entity.Name }) {
177167
newEntities = append(newEntities, entity)
178168
graph.Entities = append(graph.Entities, entity)
179169
}
@@ -187,6 +177,7 @@ func (k knowledgeBase) createEntities(entities []Entity) ([]Entity, error) {
187177
}
188178

189179
// createRelations adds new relations to the graph, skipping exact duplicates.
180+
// Returns the new relations that were actually added.
190181
func (k knowledgeBase) createRelations(relations []Relation) ([]Relation, error) {
191182
graph, err := k.loadGraph()
192183
if err != nil {
@@ -195,16 +186,11 @@ func (k knowledgeBase) createRelations(relations []Relation) ([]Relation, error)
195186

196187
var newRelations []Relation
197188
for _, relation := range relations {
198-
exists := false
199-
for _, existingRelation := range graph.Relations {
200-
if existingRelation.From == relation.From &&
201-
existingRelation.To == relation.To &&
202-
existingRelation.RelationType == relation.RelationType {
203-
exists = true
204-
break
205-
}
206-
}
207-
189+
exists := slices.ContainsFunc(graph.Relations, func(r Relation) bool {
190+
return r.From == relation.From &&
191+
r.To == relation.To &&
192+
r.RelationType == relation.RelationType
193+
})
208194
if !exists {
209195
newRelations = append(newRelations, relation)
210196
graph.Relations = append(graph.Relations, relation)
@@ -219,6 +205,7 @@ func (k knowledgeBase) createRelations(relations []Relation) ([]Relation, error)
219205
}
220206

221207
// addObservations appends new observations to existing entities.
208+
// Returns the new observations that were actually added.
222209
func (k knowledgeBase) addObservations(observations []Observation) ([]Observation, error) {
223210
graph, err := k.loadGraph()
224211
if err != nil {
@@ -228,23 +215,14 @@ func (k knowledgeBase) addObservations(observations []Observation) ([]Observatio
228215
var results []Observation
229216

230217
for _, obs := range observations {
231-
entityIndex := -1
232-
for i, entity := range graph.Entities {
233-
if entity.Name == obs.EntityName {
234-
entityIndex = i
235-
break
236-
}
237-
}
238-
218+
entityIndex := slices.IndexFunc(graph.Entities, func(e Entity) bool { return e.Name == obs.EntityName })
239219
if entityIndex == -1 {
240220
return nil, fmt.Errorf("entity with name %s not found", obs.EntityName)
241221
}
242222

243223
var newObservations []string
244224
for _, content := range obs.Contents {
245-
exists := slices.Contains(graph.Entities[entityIndex].Observations, content)
246-
247-
if !exists {
225+
if !slices.Contains(graph.Entities[entityIndex].Observations, content) {
248226
newObservations = append(newObservations, content)
249227
graph.Entities[entityIndex].Observations = append(graph.Entities[entityIndex].Observations, content)
250228
}
@@ -276,23 +254,15 @@ func (k knowledgeBase) deleteEntities(entityNames []string) error {
276254
entitiesToDelete[name] = true
277255
}
278256

279-
// Filter entities
280-
var filteredEntities []Entity
281-
for _, entity := range graph.Entities {
282-
if !entitiesToDelete[entity.Name] {
283-
filteredEntities = append(filteredEntities, entity)
284-
}
285-
}
286-
graph.Entities = filteredEntities
257+
// Filter entities using slices.DeleteFunc
258+
graph.Entities = slices.DeleteFunc(graph.Entities, func(entity Entity) bool {
259+
return entitiesToDelete[entity.Name]
260+
})
287261

288-
// Filter relations
289-
var filteredRelations []Relation
290-
for _, relation := range graph.Relations {
291-
if !entitiesToDelete[relation.From] && !entitiesToDelete[relation.To] {
292-
filteredRelations = append(filteredRelations, relation)
293-
}
294-
}
295-
graph.Relations = filteredRelations
262+
// Filter relations using slices.DeleteFunc
263+
graph.Relations = slices.DeleteFunc(graph.Relations, func(relation Relation) bool {
264+
return entitiesToDelete[relation.From] || entitiesToDelete[relation.To]
265+
})
296266

297267
return k.saveGraph(graph)
298268
}
@@ -305,26 +275,23 @@ func (k knowledgeBase) deleteObservations(deletions []Observation) error {
305275
}
306276

307277
for _, deletion := range deletions {
308-
for i, entity := range graph.Entities {
309-
if entity.Name == deletion.EntityName {
310-
// Create a map for quick lookup
311-
observationsToDelete := make(map[string]bool)
312-
for _, observation := range deletion.Observations {
313-
observationsToDelete[observation] = true
314-
}
315-
316-
// Filter observations
317-
var filteredObservations []string
318-
for _, observation := range entity.Observations {
319-
if !observationsToDelete[observation] {
320-
filteredObservations = append(filteredObservations, observation)
321-
}
322-
}
323-
324-
graph.Entities[i].Observations = filteredObservations
325-
break
326-
}
278+
entityIndex := slices.IndexFunc(graph.Entities, func(e Entity) bool {
279+
return e.Name == deletion.EntityName
280+
})
281+
if entityIndex == -1 {
282+
continue
327283
}
284+
285+
// Create a map for quick lookup
286+
observationsToDelete := make(map[string]bool)
287+
for _, observation := range deletion.Observations {
288+
observationsToDelete[observation] = true
289+
}
290+
291+
// Filter observations using slices.DeleteFunc
292+
graph.Entities[entityIndex].Observations = slices.DeleteFunc(graph.Entities[entityIndex].Observations, func(observation string) bool {
293+
return observationsToDelete[observation]
294+
})
328295
}
329296

330297
return k.saveGraph(graph)
@@ -337,25 +304,14 @@ func (k knowledgeBase) deleteRelations(relations []Relation) error {
337304
return err
338305
}
339306

340-
var filteredRelations []Relation
341-
for _, existingRelation := range graph.Relations {
342-
shouldKeep := true
343-
344-
for _, relationToDelete := range relations {
345-
if existingRelation.From == relationToDelete.From &&
307+
// Filter relations using slices.DeleteFunc and slices.ContainsFunc
308+
graph.Relations = slices.DeleteFunc(graph.Relations, func(existingRelation Relation) bool {
309+
return slices.ContainsFunc(relations, func(relationToDelete Relation) bool {
310+
return existingRelation.From == relationToDelete.From &&
346311
existingRelation.To == relationToDelete.To &&
347-
existingRelation.RelationType == relationToDelete.RelationType {
348-
shouldKeep = false
349-
break
350-
}
351-
}
352-
353-
if shouldKeep {
354-
filteredRelations = append(filteredRelations, existingRelation)
355-
}
356-
}
357-
358-
graph.Relations = filteredRelations
312+
existingRelation.RelationType == relationToDelete.RelationType
313+
})
314+
})
359315
return k.saveGraph(graph)
360316
}
361317

0 commit comments

Comments
 (0)