summaryrefslogtreecommitdiff
path: root/rag/rag.go
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2026-03-05 20:02:46 +0300
committerGrail Finder <wohilas@gmail.com>2026-03-05 20:02:46 +0300
commitefc92d884c36498220e2b8d5ad9e02f84e42d953 (patch)
tree6361de7107d077e39c1aeb312013041d40f73167 /rag/rag.go
parentac8c8bb0558a00cf0d025ab8522aaa57b8cba7de (diff)
Chore: onnx library lookup
Diffstat (limited to 'rag/rag.go')
-rw-r--r--rag/rag.go39
1 files changed, 24 insertions, 15 deletions
diff --git a/rag/rag.go b/rag/rag.go
index 654afde..fa30303 100644
--- a/rag/rag.go
+++ b/rag/rag.go
@@ -25,20 +25,23 @@ var (
)
type RAG struct {
- logger *slog.Logger
- store storage.FullRepo
- cfg *config.Config
- embedder Embedder
- storage *VectorStorage
- mu sync.Mutex
+ logger *slog.Logger
+ store storage.FullRepo
+ cfg *config.Config
+ embedder Embedder
+ storage *VectorStorage
+ mu sync.Mutex
+ fallbackMsg string
}
-func New(l *slog.Logger, s storage.FullRepo, cfg *config.Config) *RAG {
+func New(l *slog.Logger, s storage.FullRepo, cfg *config.Config) (*RAG, error) {
var embedder Embedder
+ var fallbackMsg string
if cfg.EmbedModelPath != "" && cfg.EmbedTokenizerPath != "" {
emb, err := NewONNXEmbedder(cfg.EmbedModelPath, cfg.EmbedTokenizerPath, cfg.EmbedDims, l)
if err != nil {
l.Error("failed to create ONNX embedder, falling back to API", "error", err)
+ fallbackMsg = err.Error()
embedder = NewAPIEmbedder(l, cfg)
} else {
embedder = emb
@@ -49,16 +52,17 @@ func New(l *slog.Logger, s storage.FullRepo, cfg *config.Config) *RAG {
l.Info("using API embedder", "url", cfg.EmbedURL)
}
rag := &RAG{
- logger: l,
- store: s,
- cfg: cfg,
- embedder: embedder,
- storage: NewVectorStorage(l, s),
+ logger: l,
+ store: s,
+ cfg: cfg,
+ embedder: embedder,
+ storage: NewVectorStorage(l, s),
+ fallbackMsg: fallbackMsg,
}
// Note: Vector tables are created via database migrations, not at runtime
- return rag
+ return rag, nil
}
func wordCounter(sentence string) int {
@@ -449,14 +453,19 @@ var (
ragOnce sync.Once
)
+func (r *RAG) FallbackMessage() string {
+ return r.fallbackMsg
+}
+
func Init(c *config.Config, l *slog.Logger, s storage.FullRepo) error {
+ var err error
ragOnce.Do(func() {
if c == nil || l == nil || s == nil {
return
}
- ragInstance = New(l, s, c)
+ ragInstance, err = New(l, s, c)
})
- return nil
+ return err
}
func GetInstance() *RAG {