1212import logging
1313
1414from ai_agent .utils .full_processing import full_processing
15+ from ai_agent .utils .config import get_retrieval_config
1516
1617import hashlib
1718from ai_agent .retriever .software_doc import SoftwareDoc
2122log = logging .getLogger ("ai_agent.catalog.sync" )
2223
2324
25+ def _build_embedder () -> LocalBGEEmbedder :
26+ """Build a LocalBGEEmbedder from the current retrieval config."""
27+ retrieval_cfg = get_retrieval_config ()
28+ embed_cfg = retrieval_cfg .get ("embedder" , {}) if isinstance (retrieval_cfg , dict ) else {}
29+ return LocalBGEEmbedder (
30+ model_name = embed_cfg .get ("model_name" , "Qwen/Qwen3-Embedding-8B" ),
31+ device = embed_cfg .get ("device" ),
32+ backend = embed_cfg .get ("backend" , "remote" ),
33+ base_url = embed_cfg .get ("base_url" , "https://inference-rcp.epfl.ch/v1" ),
34+ api_key_env = embed_cfg .get ("api_key_env" , "EPFL_API_KEY_EMBEDDER" ),
35+ timeout_s = float (embed_cfg .get ("timeout_s" , 20.0 )),
36+ )
37+
38+
2439def _index_artifacts_present (index_dir : Path ) -> bool :
2540 """Return True when minimal FAISS artifacts exist."""
2641 return (index_dir / "index.faiss" ).exists () and (index_dir / "meta.json" ).exists ()
@@ -398,7 +413,7 @@ def sync_once(
398413 faiss_rebuilt = False
399414 faiss_delta : Dict [str , int ] = {"added" : 0 , "updated" : 0 , "removed" : 0 }
400415 try :
401- embedder = LocalBGEEmbedder ()
416+ embedder = _build_embedder ()
402417 VectorIndex .load (index_dir , embedder )
403418 log .info (
404419 "Catalog unchanged (semantic sha1=%s); keeping FAISS index" , digest [:12 ]
@@ -408,7 +423,7 @@ def sync_once(
408423 "Catalog unchanged but FAISS index is missing/incompatible; rebuilding index (%s)" ,
409424 e ,
410425 )
411- embedder = LocalBGEEmbedder ()
426+ embedder = _build_embedder ()
412427 idx = VectorIndex (embedder )
413428 items = [
414429 IndexItem (id = d .name , doc = d ) for d in docs if getattr (d , "name" , None )
@@ -461,7 +476,7 @@ def sync_once(
461476 log .info (" changed (sample): %s" , chg_s )
462477 log .info ("Full diff written to %s" , diff_path )
463478
464- embedder = LocalBGEEmbedder ()
479+ embedder = _build_embedder ()
465480 try :
466481 idx = VectorIndex .load (index_dir , embedder )
467482 except Exception as e :
0 commit comments