(embClient *embedder.EmbeddingClient, tree *object.Tree, db *gorm.DB, url string)
| 239 | } |
| 240 | |
| 241 | func 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 | } |
no test coverage detected