import gradio as gr
import os
import json
import time
import pandas as pd
import numpy as np
from src.vector_db import UnifiedQdrant
from src.router import LearnedRouter
from src.data_pipeline import get_embedding
from config import (
COLLECTIONS, EMBEDDING_MODELS, ROUTER_MODELS,
NUM_CLUSTERS, FRESHNESS_SHARD_ID
)
# --- Initialize Backend ---
print("Initializing Backend...")
# 1. Vector DB Clients
# We need clients for both Prod (Sharded) and Base (Unsharded) for each model
dbs = {}
for model_key, cols in COLLECTIONS.items():
# Load Dimension from JSON
try:
with open(f"models/model_info_{model_key}.json", "r") as f:
vec_size = json.load(f)["dim"]
except:
print(f"Warning: Could not load model info for {model_key}. Using default 384.")
vec_size = 384
# Load Shard Sizes
try:
with open(f"models/shard_sizes_{model_key}.json", "r") as f:
shard_sizes = json.load(f)
# Convert keys to int
shard_sizes = {int(k): v for k, v in shard_sizes.items()}
dbs[f"{model_key}_sizes"] = shard_sizes
except:
print(f"Warning: Could not load shard sizes for {model_key}.")
dbs[f"{model_key}_sizes"] = {}
# Prod
print(f"Initializing DB: {cols['prod']}...")
db_prod = UnifiedQdrant(cols['prod'], vector_size=vec_size, num_clusters=NUM_CLUSTERS, freshness_shard_id=FRESHNESS_SHARD_ID)
db_prod.initialize(is_baseline=False)
dbs[f"{model_key}_prod"] = db_prod
# Base
print(f"Initializing DB: {cols['base']}...")
db_base = UnifiedQdrant(cols['base'], vector_size=vec_size, num_clusters=1)
db_base.initialize(is_baseline=True)
dbs[f"{model_key}_base"] = db_base
# 2. Load Routers
routers = {}
for model_key in EMBEDDING_MODELS.keys():
for router_type in ROUTER_MODELS:
router_path = f"models/router_{model_key}_{router_type}.pkl"
try:
print(f"Loading Router: {router_path}...")
routers[f"{model_key}_{router_type}"] = LearnedRouter.load(router_path)
except Exception as e:
print(f"Warning: Could not load {router_path}: {e}. Using None.")
routers[f"{model_key}_{router_type}"] = None
# --- HTML Templates ---
HEAD_HTML = """
"""
NAVBAR_HTML = """
dashVector Experiment Matrix
Improves search efficiency by using a Router Model to predict specific data shards.
Utilizes Qdrant for high-performance vector storage and retrieval.
Shards are iteratively added until cumulative confidence > 0.9.
Ready to benchmark
Enter a query above to compare routing architectures.