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 }