(r *redisearch.Client, embeddings embedder.CodeEmbeddingsResponse, namespace string)
| 596 | } |
| 597 | |
| 598 | func setCodeEmbeddings(r *redisearch.Client, embeddings embedder.CodeEmbeddingsResponse, namespace string) error { |
| 599 | // Use a redis pipeline to set all embeddings in one go |
| 600 | docs := make([]redisearch.Document, 0) |
| 601 | for filePath, embs := range embeddings.Results { |
| 602 | for _, emb := range embs.Embeddings { |
| 603 | // Create a unique key for each embedding |
| 604 | key := fmt.Sprintf("%s:embedding:%s:%s:%d", namespace, "code", emb.FileHash, emb.ChunkID) |
| 605 | doc := redisearch.NewDocument(key, 1.0) |
| 606 | doc.Set("fileHash", emb.FileHash) |
| 607 | doc.Set("filePath", filePath) |
| 608 | doc.Set("chunkID", emb.ChunkID) |
| 609 | doc.Set("startIndex", emb.StartIndex) |
| 610 | doc.Set("endIndex", emb.EndIndex) |
| 611 | // Convert embedding float slice to bytes |
| 612 | buf := new(bytes.Buffer) |
| 613 | for _, val := range emb.Embedding { |
| 614 | if err := binary.Write(buf, binary.LittleEndian, val); err != nil { |
| 615 | return err // Handle error appropriately |
| 616 | } |
| 617 | } |
| 618 | doc.Set("embedding", buf.Bytes()) |
| 619 | docs = append(docs, doc) |
| 620 | } |
| 621 | } |
| 622 | |
| 623 | if err := r.IndexOptions(redisearch.IndexingOptions{ |
| 624 | Replace: true, |
| 625 | }, docs...); err != nil { |
| 626 | return err |
| 627 | } |
| 628 | |
| 629 | return nil |
| 630 | } |
| 631 | |
| 632 | func newScheme() *runtime.Scheme { |
| 633 | scheme := runtime.NewScheme() |
no outgoing calls
no test coverage detected