@@ -44,8 +44,10 @@ def __init__(
4444 try :
4545 from knowcode .llm .voyageai_client import get_voyageai_client
4646 self .voyage_client = get_voyageai_client (api_key_env )
47- except Exception :
48- pass # Fall back to signal-based
47+ except ImportError as e :
48+ print (f" ⚠️ VoyageAI client not available (missing package): { e } " )
49+ except ValueError as e :
50+ print (f" ⚠️ VoyageAI client not available (configuration error): { e } " )
4951
5052 def rerank (
5153 self ,
@@ -75,15 +77,45 @@ def rerank(
7577
7678 # Try VoyageAI cross-encoder reranking
7779 if self .voyage_client :
80+ start_time = time .time ()
7881 try :
79- return self ._rerank_with_voyageai (query , chunks , top_k )
82+ result = self ._rerank_with_voyageai (query , chunks , top_k )
83+ latency = time .time () - start_time
84+ self ._log_telemetry ("voyageai" , latency , len (chunks ))
85+ return result
86+ except ValueError as e :
87+ print (f" ⚠️ VoyageAI reranking failed (invalid input): { e } . Using signal-based fallback." )
88+ except ConnectionError as e :
89+ print (f" ⚠️ VoyageAI reranking failed (network error): { e } . Using signal-based fallback." )
8090 except Exception as e :
91+ import logging
92+ logging .error (f"VoyageAI reranking API failed: { e } " )
8193 print (f" ⚠️ VoyageAI reranking failed: { e } . Using signal-based fallback." )
8294
8395 # Fallback to signal-based reranking
84- return self ._rerank_with_signals (
96+ start_time = time .time ()
97+ result = self ._rerank_with_signals (
8598 query , chunks , boost_recent , boost_documented , top_k
8699 )
100+ latency = time .time () - start_time
101+ self ._log_telemetry ("signal_based" , latency , len (chunks ))
102+ return result
103+
104+ def _log_telemetry (self , method : str , latency : float , num_chunks : int ) -> None :
105+ """Log reranking latency telemetry."""
106+ from knowcode .telemetry import log_event
107+ try :
108+ log_event (
109+ "." , # We don't have store_path here, telemetry.py handles fallback to current dir
110+ {
111+ "event_type" : "reranker_latency" ,
112+ "method" : method ,
113+ "latency_seconds" : latency ,
114+ "num_chunks" : num_chunks ,
115+ }
116+ )
117+ except Exception :
118+ pass
87119
88120 def _rerank_with_voyageai (
89121 self ,
0 commit comments