 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package faiss
 | |
| 
 | |
| /*
 | |
| #include <faiss/c_api/impl/AuxIndexStructures_c.h>
 | |
| */
 | |
| import "C"
 | |
| 
 | |
| type Selector interface {
 | |
| 	Get() *C.FaissIDSelector
 | |
| 	Delete()
 | |
| }
 | |
| 
 | |
| // IDSelector represents a set of IDs to remove.
 | |
| type IDSelector struct {
 | |
| 	sel *C.FaissIDSelector
 | |
| }
 | |
| 
 | |
| // Delete frees the memory associated with s.
 | |
| func (s *IDSelector) Delete() {
 | |
| 	if s == nil || s.sel == nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	C.faiss_IDSelector_free(s.sel)
 | |
| }
 | |
| 
 | |
| func (s *IDSelector) Get() *C.FaissIDSelector {
 | |
| 	return s.sel
 | |
| }
 | |
| 
 | |
| type IDSelectorNot struct {
 | |
| 	sel      *C.FaissIDSelector
 | |
| 	batchSel *C.FaissIDSelector
 | |
| }
 | |
| 
 | |
| // Delete frees the memory associated with s.
 | |
| func (s *IDSelectorNot) Delete() {
 | |
| 	if s == nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if s.sel != nil {
 | |
| 		C.faiss_IDSelector_free(s.sel)
 | |
| 	}
 | |
| 	if s.batchSel != nil {
 | |
| 		C.faiss_IDSelector_free(s.batchSel)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (s *IDSelectorNot) Get() *C.FaissIDSelector {
 | |
| 	return s.sel
 | |
| }
 | |
| 
 | |
| // NewIDSelectorRange creates a selector that removes IDs on [imin, imax).
 | |
| func NewIDSelectorRange(imin, imax int64) (Selector, error) {
 | |
| 	var sel *C.FaissIDSelectorRange
 | |
| 	c := C.faiss_IDSelectorRange_new(&sel, C.idx_t(imin), C.idx_t(imax))
 | |
| 	if c != 0 {
 | |
| 		return nil, getLastError()
 | |
| 	}
 | |
| 	return &IDSelector{(*C.FaissIDSelector)(sel)}, nil
 | |
| }
 | |
| 
 | |
| // NewIDSelectorBatch creates a new batch selector.
 | |
| func NewIDSelectorBatch(indices []int64) (Selector, error) {
 | |
| 	var sel *C.FaissIDSelectorBatch
 | |
| 	if c := C.faiss_IDSelectorBatch_new(
 | |
| 		&sel,
 | |
| 		C.size_t(len(indices)),
 | |
| 		(*C.idx_t)(&indices[0]),
 | |
| 	); c != 0 {
 | |
| 		return nil, getLastError()
 | |
| 	}
 | |
| 	return &IDSelector{(*C.FaissIDSelector)(sel)}, nil
 | |
| }
 | |
| 
 | |
| // NewIDSelectorNot creates a new Not selector, wrapped around a
 | |
| // batch selector, with the IDs in 'exclude'.
 | |
| func NewIDSelectorNot(exclude []int64) (Selector, error) {
 | |
| 	batchSelector, err := NewIDSelectorBatch(exclude)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	var sel *C.FaissIDSelectorNot
 | |
| 	if c := C.faiss_IDSelectorNot_new(
 | |
| 		&sel,
 | |
| 		batchSelector.Get(),
 | |
| 	); c != 0 {
 | |
| 		batchSelector.Delete()
 | |
| 		return nil, getLastError()
 | |
| 	}
 | |
| 	return &IDSelectorNot{sel: (*C.FaissIDSelector)(sel),
 | |
| 		batchSel: batchSelector.Get()}, nil
 | |
| }
 |