MCPcopy Create free account
hub / github.com/encoder-run/operator / processPostgresEmbeddings

Function processPostgresEmbeddings

cmd/repositoryembedder/main.go:241–304  ·  view source on GitHub ↗
(embClient *embedder.EmbeddingClient, tree *object.Tree, db *gorm.DB, url string)

Source from the content-addressed store, hash-verified

239}
240
241func processPostgresEmbeddings(embClient *embedder.EmbeddingClient, tree *object.Tree, db *gorm.DB, url string) {
242 // Check for existing processed hashes
243 existingHashes := make(map[string]bool)
244 // List all rows in the codeembedding table given the url
245 var embeddings []database.CodeEmbedding
246 if err := db.Where("url = ?", url).Find(&embeddings).Error; err != nil {
247 log.Fatalf("failed to query existing embeddings: %v", err)
248 }
249
250 // Create a set of unique hashes
251 for _, embedding := range embeddings {
252 existingHashes[fmt.Sprintf("%s.%s", embedding.FileHash, embedding.FilePath)] = true
253 }
254
255 hashes := make(map[string]bool)
256 filesBatch := []embedder.CodeEmbeddingRequest{}
257 treeIter := tree.Files()
258 batchSize := 10
259 count := 0
260
261 for {
262 file, err := treeIter.Next()
263 if err != nil {
264 if err == io.EOF {
265 break // No more files
266 }
267 log.Fatal(err)
268 }
269
270 // Skip unsupported file types
271 ext := filepath.Ext(file.Name)
272 if _, ok := supportedLanguages[ext]; !ok {
273 fmt.Printf("Skipping file '%s' since it is not supported\n", file.Name)
274 continue
275 }
276
277 hashes[fmt.Sprintf("%s.%s", file.Hash.String(), file.Name)] = true
278
279 if !existingHashes[fmt.Sprintf("%s.%s", file.Hash.String(), file.Name)] {
280 content, err := file.Contents()
281 if err != nil {
282 log.Fatal(err)
283 }
284 filesBatch = append(filesBatch, embedder.CodeEmbeddingRequest{
285 Path: file.Name,
286 Content: content,
287 Hash: file.Hash.String(),
288 })
289 count++
290
291 if count >= batchSize {
292 processAndSaveEmbeddings(embClient, db, &filesBatch, url) // process embeddings
293 filesBatch = []embedder.CodeEmbeddingRequest{} // Reset the batch
294 count = 0
295 }
296 } else {
297 fmt.Printf("Skipping file '%s' since its hash is already processed\n", file.Name)
298 }

Callers 1

mainFunction · 0.85

Calls 3

processAndSaveEmbeddingsFunction · 0.85
NextMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected