Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions benchmarking_script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import os
import time
import numpy as np
from typing import List, Dict, Any

# Placeholder for system-specific retrieval methods
def engram_retrieval(query: np.ndarray, k: int) -> List[Dict[str, Any]]:
# Implement Engram retrieval method
pass

def pinecone_retrieval(query: np.ndarray, k: int) -> List[Dict[str, Any]]:
# Implement Pinecone retrieval method
pass

def weaviate_retrieval(query: np.ndarray, k: int) -> List[Dict[str, Any]]:
# Implement Weaviate retrieval method
pass

def pgvector_retrieval(query: np.ndarray, k: int) -> List[Dict[str, Any]]:
# Implement pgvector retrieval method
pass

# System-specific configurations
SYSTEMS = {
'engram': {
'retrieval_method': engram_retrieval,
'model_path': 'path/to/engram/model',
'storage_overhead': 1.5 # Placeholder, needs proper calculation
},
'pinecone': {
'retrieval_method': pinecone_retrieval,
'model_path': 'path/to/pinecone/model',
'storage_overhead': 1.0 # Placeholder, needs proper calculation
},
'weaviate': {
'retrieval_method': weaviate_retrieval,
'model_path': 'path/to/weaviate/model',
'storage_overhead': 1.0 # Placeholder, needs proper calculation
},
'pgvector': {
'retrieval_method': pgvector_retrieval,
'model_path': 'path/to/pgvector/model',
'storage_overhead': 1.0 # Placeholder, needs proper calculation
}
}

def load_model(system: str) -> Any:
config = SYSTEMS[system]
model_path = config['model_path']
# Load the model based on the system
# Placeholder for actual model loading
return None

def calculate_storage_overhead(system: str, dataset_size: int) -> float:
config = SYSTEMS[system]
storage_overhead = config['storage_overhead']
return dataset_size * storage_overhead

def measure_latency(retrieval_method, query: np.ndarray, k: int, num_queries: int = 100) -> Dict[str, float]:
latencies = []
for _ in range(num_queries):
start_time = time.time()
retrieval_method(query, k)
end_time = time.time()
latencies.append(end_time - start_time)

latencies = np.array(latencies)
p50_latency = np.percentile(latencies, 50)
p95_latency = np.percentile(latencies, 95)
return {'p50_latency': p50_latency, 'p95_latency': p95_latency}

def main():
systems = ['engram', 'pinecone', 'weaviate', 'pgvector']
datasets = ['dataset1', 'dataset2'] # Replace with actual dataset names
k_values = [1, 5, 10]

results = {}

for system in systems:
results[system] = {}
model = load_model(system)
if model is None:
print(f"Failed to load model for {system}")
continue

for dataset in datasets:
results[system][dataset] = {}
dataset_size = 1000 # Placeholder, replace with actual dataset size
storage_overhead = calculate_storage_overhead(system, dataset_size)
results[system][dataset]['storage_overhead'] = storage_overhead

for k in k_values:
latencies = measure_latency(SYSTEMS[system]['retrieval_method'], np.random.rand(128), k)
results[system][dataset][f'latency_k{k}'] = latencies

# Print or save results
print(results)

if __name__ == "__main__":
main()