@@ -364,86 +364,89 @@ async def run(
364364 https = qdrant_https ,
365365 prefer_grpc = qdrant_prefer_grpc ,
366366 )
367- collection_name = "media-items"
368- await _ensure_collection (
369- client ,
370- collection_name ,
371- dense_size = dense_size ,
372- dense_distance = dense_distance ,
373- )
374-
375- items : list [AggregatedItem ]
376- if sample_dir is not None :
377- logger .info ("Loading sample data from %s" , sample_dir )
378- sample_items = samples ._load_from_sample (sample_dir )
379- orchestrator , items , qdrant_retry_queue = _build_loader_orchestrator (
380- client = client ,
381- collection_name = collection_name ,
382- dense_model_name = dense_model_name ,
383- sparse_model_name = sparse_model_name ,
384- tmdb_api_key = None ,
385- sample_items = sample_items ,
386- plex_server = None ,
387- plex_chunk_size = plex_chunk_size ,
388- enrichment_batch_size = enrichment_batch_size ,
389- enrichment_workers = enrichment_workers ,
390- upsert_buffer_size = upsert_buffer_size ,
391- max_concurrent_upserts = max_concurrent_upserts ,
392- imdb_config = IMDbRuntimeConfig (
393- cache = imdb_config .cache ,
394- max_retries = imdb_config .max_retries ,
395- backoff = imdb_config .backoff ,
396- retry_queue = IMDbRetryQueue (),
397- requests_per_window = imdb_config .requests_per_window ,
398- window_seconds = imdb_config .window_seconds ,
399- ),
400- qdrant_config = qdrant_config ,
367+ try :
368+ collection_name = "media-items"
369+ await _ensure_collection (
370+ client ,
371+ collection_name ,
372+ dense_size = dense_size ,
373+ dense_distance = dense_distance ,
401374 )
402- logger .info ("Starting staged loader (sample mode)" )
403- await orchestrator .run ()
404- else :
405- if PlexServer is None :
406- raise RuntimeError ("plexapi is required for live loading" )
407- if not plex_url or not plex_token :
408- raise RuntimeError ("PLEX_URL and PLEX_TOKEN must be provided" )
409- if not tmdb_api_key :
410- raise RuntimeError ("TMDB_API_KEY must be provided" )
411- logger .info ("Loading data from Plex server %s" , plex_url )
412- server = PlexServer (plex_url , plex_token )
413- orchestrator , items , qdrant_retry_queue = _build_loader_orchestrator (
414- client = client ,
415- collection_name = collection_name ,
416- dense_model_name = dense_model_name ,
417- sparse_model_name = sparse_model_name ,
418- tmdb_api_key = tmdb_api_key ,
419- sample_items = None ,
420- plex_server = server ,
421- plex_chunk_size = plex_chunk_size ,
422- enrichment_batch_size = enrichment_batch_size ,
423- enrichment_workers = enrichment_workers ,
424- upsert_buffer_size = upsert_buffer_size ,
425- max_concurrent_upserts = max_concurrent_upserts ,
426- imdb_config = imdb_config ,
427- qdrant_config = qdrant_config ,
428- )
429- logger .info ("Starting staged loader (Plex mode)" )
430- await orchestrator .run ()
431- logger .info ("Loaded %d items" , len (items ))
432- if not items :
433- logger .info ("No points to upsert" )
434375
435- await _process_qdrant_retry_queue (
436- client ,
437- collection_name ,
438- qdrant_retry_queue ,
439- config = qdrant_config ,
440- )
376+ items : list [AggregatedItem ]
377+ if sample_dir is not None :
378+ logger .info ("Loading sample data from %s" , sample_dir )
379+ sample_items = samples ._load_from_sample (sample_dir )
380+ orchestrator , items , qdrant_retry_queue = _build_loader_orchestrator (
381+ client = client ,
382+ collection_name = collection_name ,
383+ dense_model_name = dense_model_name ,
384+ sparse_model_name = sparse_model_name ,
385+ tmdb_api_key = None ,
386+ sample_items = sample_items ,
387+ plex_server = None ,
388+ plex_chunk_size = plex_chunk_size ,
389+ enrichment_batch_size = enrichment_batch_size ,
390+ enrichment_workers = enrichment_workers ,
391+ upsert_buffer_size = upsert_buffer_size ,
392+ max_concurrent_upserts = max_concurrent_upserts ,
393+ imdb_config = IMDbRuntimeConfig (
394+ cache = imdb_config .cache ,
395+ max_retries = imdb_config .max_retries ,
396+ backoff = imdb_config .backoff ,
397+ retry_queue = IMDbRetryQueue (),
398+ requests_per_window = imdb_config .requests_per_window ,
399+ window_seconds = imdb_config .window_seconds ,
400+ ),
401+ qdrant_config = qdrant_config ,
402+ )
403+ logger .info ("Starting staged loader (sample mode)" )
404+ await orchestrator .run ()
405+ else :
406+ if PlexServer is None :
407+ raise RuntimeError ("plexapi is required for live loading" )
408+ if not plex_url or not plex_token :
409+ raise RuntimeError ("PLEX_URL and PLEX_TOKEN must be provided" )
410+ if not tmdb_api_key :
411+ raise RuntimeError ("TMDB_API_KEY must be provided" )
412+ logger .info ("Loading data from Plex server %s" , plex_url )
413+ server = PlexServer (plex_url , plex_token )
414+ orchestrator , items , qdrant_retry_queue = _build_loader_orchestrator (
415+ client = client ,
416+ collection_name = collection_name ,
417+ dense_model_name = dense_model_name ,
418+ sparse_model_name = sparse_model_name ,
419+ tmdb_api_key = tmdb_api_key ,
420+ sample_items = None ,
421+ plex_server = server ,
422+ plex_chunk_size = plex_chunk_size ,
423+ enrichment_batch_size = enrichment_batch_size ,
424+ enrichment_workers = enrichment_workers ,
425+ upsert_buffer_size = upsert_buffer_size ,
426+ max_concurrent_upserts = max_concurrent_upserts ,
427+ imdb_config = imdb_config ,
428+ qdrant_config = qdrant_config ,
429+ )
430+ logger .info ("Starting staged loader (Plex mode)" )
431+ await orchestrator .run ()
432+ logger .info ("Loaded %d items" , len (items ))
433+ if not items :
434+ logger .info ("No points to upsert" )
435+
436+ await _process_qdrant_retry_queue (
437+ client ,
438+ collection_name ,
439+ qdrant_retry_queue ,
440+ config = qdrant_config ,
441+ )
441442
442- if imdb_queue_path :
443- _persist_imdb_retry_queue (imdb_queue_path , imdb_config .retry_queue )
443+ if imdb_queue_path :
444+ _persist_imdb_retry_queue (imdb_queue_path , imdb_config .retry_queue )
444445
445- json .dump ([item .model_dump (mode = "json" ) for item in items ], fp = sys .stdout , indent = 2 )
446- sys .stdout .write ("\n " )
446+ json .dump ([item .model_dump (mode = "json" ) for item in items ], fp = sys .stdout , indent = 2 )
447+ sys .stdout .write ("\n " )
448+ finally :
449+ await client .close ()
447450
448451
449452async def load_media (
0 commit comments