diff options
author | Grail Finder <wohilas@gmail.com> | 2024-12-31 13:25:13 +0300 |
---|---|---|
committer | Grail Finder <wohilas@gmail.com> | 2024-12-31 13:25:13 +0300 |
commit | 461d19aa2512fea7ac07e50c3178609850ef07c3 (patch) | |
tree | 1e317b813686ca7696e96bba766cdbd3aeb35138 /rag.go | |
parent | 4db8aea43dded3f2c1d0d41b5a3fb322a38d4730 (diff) |
Feat: add rag [wip; skip-ci]
Diffstat (limited to 'rag.go')
-rw-r--r-- | rag.go | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -0,0 +1,40 @@ +package main + +import ( + "bytes" + "elefant/models" + "encoding/json" +) + +func lineToVector(line string) (*models.EmbeddingResp, error) { + payload, err := json.Marshal(map[string]string{"content": line}) + if err != nil { + logger.Error("failed to marshal payload", "err:", err.Error()) + return nil, err + } + resp, err := httpClient.Post(cfg.EmbedURL, "application/json", bytes.NewReader(payload)) + if err != nil { + logger.Error("failed to embedd line", "err:", err.Error()) + return nil, err + } + defer resp.Body.Close() + emb := models.EmbeddingResp{} + if err := json.NewDecoder(resp.Body).Decode(&emb); err != nil { + logger.Error("failed to embedd line", "err:", err.Error()) + return nil, err + } + return &emb, nil +} + +func saveLine(topic, line string, emb *models.EmbeddingResp) error { + row := &models.VectorRow{ + Embeddings: emb.Embedding, + Slug: topic, + RawText: line, + } + return store.WriteVector(row) +} + +func searchEmb(emb *models.EmbeddingResp) (*models.VectorRow, error) { + return store.SearchClosest([5120]float32(emb.Embedding)) +} |