#!/usr/bin/env python3
# See lib/edge/publish/examples/src/bin/fusion-query.rs for the equivalent Rust example.

from qdrant_edge import *
from common import *


shard = load_new_shard()
fill_dummy_data(shard)

search_filter = Filter(
    must=[
        FieldCondition(
            key="color",
            match=MatchValue(value="red"),
        )
    ]
)

# Basic RRF fusion (equal weights)
print("=== Basic RRF Fusion ===")
result = shard.query(QueryRequest(
    prefetches = [
        Prefetch(
            prefetches=[],
            query=Query.Nearest([6.0, 9.0, 4.0, 2.0]),
            limit=5,
            params=None,
            filter=None,
            score_threshold=None,
        ),
        Prefetch(
            prefetches=[],
            query=Query.Nearest([1.0, -3.0, 2.0, 8.0]),
            limit=5,
            params=None,
            filter=search_filter,
            score_threshold=None,
        )
    ],
    query = Fusion.Rrf(k=2),
    filter = None,
    score_threshold = None,
    limit = 10,
    offset = 0,
    params = None,
    with_vector = True,
    with_payload = True,
))

for point in result:
    print(point)

# Weighted RRF fusion - first prefetch has 3x weight
print("\n=== Weighted RRF Fusion (3:1) ===")
result = shard.query(QueryRequest(
    prefetches = [
        Prefetch(
            prefetches=[],
            query=Query.Nearest([6.0, 9.0, 4.0, 2.0]),
            limit=5,
            params=None,
            filter=None,
            score_threshold=None,
        ),
        Prefetch(
            prefetches=[],
            query=Query.Nearest([1.0, -3.0, 2.0, 8.0]),
            limit=5,
            params=None,
            filter=search_filter,
            score_threshold=None,
        )
    ],
    query = Fusion.Rrf(k=2, weights=[3.0, 1.0]),  # First prefetch has 3x weight
    filter = None,
    score_threshold = None,
    limit = 10,
    offset = 0,
    params = None,
    with_vector = True,
    with_payload = True,
))

for point in result:
    print(point)
