/ src / models / knowledge.go
knowledge.go
 1  package models
 2  
 3  import (
 4  	"fmt"
 5  	"io/ioutil"
 6  	"os"
 7  	"path/filepath"
 8  	"time"
 9  )
10  
11  // KnowledgeBase represents a compressed knowledge base.
12  type KnowledgeBase struct {
13  	CompressedContent string
14  	LastUpdated       time.Time
15  	SourceFiles       []string
16  }
17  
18  // NewKnowledgeBase creates a new KnowledgeBase.
19  func NewKnowledgeBase() *KnowledgeBase {
20  	return &KnowledgeBase{
21  		CompressedContent: "",
22  		LastUpdated:       time.Now(),
23  		SourceFiles:       []string{},
24  	}
25  }
26  
27  // LoadFiles loads text and markdown files from a directory.
28  func LoadFiles(path string) ([]struct {
29  	Name    string
30  	Content string
31  }, error) {
32  	var files []struct {
33  		Name    string
34  		Content string
35  	}
36  
37  	// Check if the directory exists, create it if not
38  	if _, err := os.Stat(path); os.IsNotExist(err) {
39  		if err := os.MkdirAll(path, os.ModePerm); err != nil {
40  			return nil, fmt.Errorf("failed to create directory: %v", err)
41  		}
42  		return files, nil
43  	}
44  
45  	// Read the directory
46  	entries, err := ioutil.ReadDir(path)
47  	if err != nil {
48  		return nil, fmt.Errorf("failed to read directory: %v", err)
49  	}
50  
51  	for _, entry := range entries {
52  		if !entry.IsDir() {
53  			ext := filepath.Ext(entry.Name())
54  			if ext == ".txt" || ext == ".md" {
55  				content, err := ioutil.ReadFile(filepath.Join(path, entry.Name()))
56  				if err != nil {
57  					return nil, fmt.Errorf("failed to read file %s: %v", entry.Name(), err)
58  				}
59  
60  				files = append(files, struct {
61  					Name    string
62  					Content string
63  				}{
64  					Name:    entry.Name(),
65  					Content: string(content),
66  				})
67  			}
68  		}
69  	}
70  
71  	return files, nil
72  }