feat: add teaching asset prompts
This commit is contained in:
49
internal/teachingassets/store.go
Normal file
49
internal/teachingassets/store.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package teachingassets
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"tutor/internal/workflows"
|
||||
)
|
||||
|
||||
type Store interface {
|
||||
SavePrompt(PromptCandidate) (PromptCandidate, error)
|
||||
Snapshot() Snapshot
|
||||
}
|
||||
|
||||
type MemoryStore struct {
|
||||
mu sync.RWMutex
|
||||
prompts []PromptCandidate
|
||||
}
|
||||
|
||||
func NewMemoryStore() *MemoryStore {
|
||||
return &MemoryStore{}
|
||||
}
|
||||
|
||||
func (s *MemoryStore) SavePrompt(prompt PromptCandidate) (PromptCandidate, error) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
s.prompts = append(s.prompts, clonePrompt(prompt))
|
||||
return prompt, nil
|
||||
}
|
||||
|
||||
func (s *MemoryStore) Snapshot() Snapshot {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
return Snapshot{Prompts: clonePrompts(s.prompts)}
|
||||
}
|
||||
|
||||
func clonePrompts(items []PromptCandidate) []PromptCandidate {
|
||||
cloned := make([]PromptCandidate, len(items))
|
||||
for i, item := range items {
|
||||
cloned[i] = clonePrompt(item)
|
||||
}
|
||||
return cloned
|
||||
}
|
||||
|
||||
func clonePrompt(prompt PromptCandidate) PromptCandidate {
|
||||
prompt.SourceEvidence = append([]workflows.EvidenceRef(nil), prompt.SourceEvidence...)
|
||||
return prompt
|
||||
}
|
||||
Reference in New Issue
Block a user