3131logger = logging .getLogger (__name__ )
3232
3333
34+ def _set_if_not_none (target : dict [str , Any ], key : str , value : object ) -> None :
35+ if value is not None :
36+ target [key ] = value
37+
38+
3439class Config :
3540 """
3641 Configuration interface for managing MemMachine server settings.
@@ -438,8 +443,12 @@ def update_semantic_memory_config(
438443 database : str | None = None ,
439444 llm_model : str | None = None ,
440445 embedding_model : str | None = None ,
446+ cluster_split_reranker : str | None = None ,
441447 ingestion_trigger_messages : int | None = None ,
442448 ingestion_trigger_age_seconds : int | None = None ,
449+ cluster_idle_ttl_seconds : int | None = None ,
450+ cluster_similarity_threshold : float | None = None ,
451+ cluster_max_time_gap_seconds : int | None = None ,
443452 timeout : int | None = None ,
444453 ) -> UpdateMemoryConfigResponse :
445454 """
@@ -450,8 +459,12 @@ def update_semantic_memory_config(
450459 database: Name of the database to use for semantic memory
451460 llm_model: Name of the language model to use for feature extraction
452461 embedding_model: Name of the embedder to use for semantic similarity
462+ cluster_split_reranker: Reranker ID used for cluster split scoring
453463 ingestion_trigger_messages: Number of messages before triggering ingestion
454464 ingestion_trigger_age_seconds: Age threshold in seconds for triggering ingestion
465+ cluster_idle_ttl_seconds: Idle TTL in seconds for empty cluster GC
466+ cluster_similarity_threshold: Cosine similarity threshold for clustering
467+ cluster_max_time_gap_seconds: Maximum time gap in seconds for clustering
455468 timeout: Request timeout in seconds (uses client default if not provided)
456469
457470 Returns:
@@ -463,14 +476,43 @@ def update_semantic_memory_config(
463476
464477 """
465478 self ._check_closed ()
466- spec = UpdateSemanticMemorySpec (
467- enabled = enabled ,
468- database = database ,
469- llm_model = llm_model ,
470- embedding_model = embedding_model ,
471- ingestion_trigger_messages = ingestion_trigger_messages ,
472- ingestion_trigger_age_seconds = ingestion_trigger_age_seconds ,
479+ spec_data : dict [str , Any ] = {}
480+ _set_if_not_none (spec_data , "enabled" , enabled )
481+ _set_if_not_none (spec_data , "database" , database )
482+ _set_if_not_none (spec_data , "llm_model" , llm_model )
483+ _set_if_not_none (spec_data , "embedding_model" , embedding_model )
484+ _set_if_not_none (
485+ spec_data ,
486+ "cluster_split_reranker" ,
487+ cluster_split_reranker ,
488+ )
489+ _set_if_not_none (
490+ spec_data ,
491+ "ingestion_trigger_messages" ,
492+ ingestion_trigger_messages ,
473493 )
494+ _set_if_not_none (
495+ spec_data ,
496+ "ingestion_trigger_age_seconds" ,
497+ ingestion_trigger_age_seconds ,
498+ )
499+ _set_if_not_none (
500+ spec_data ,
501+ "cluster_idle_ttl_seconds" ,
502+ cluster_idle_ttl_seconds ,
503+ )
504+ _set_if_not_none (
505+ spec_data ,
506+ "cluster_similarity_threshold" ,
507+ cluster_similarity_threshold ,
508+ )
509+ _set_if_not_none (
510+ spec_data ,
511+ "cluster_max_time_gap_seconds" ,
512+ cluster_max_time_gap_seconds ,
513+ )
514+
515+ spec = UpdateSemanticMemorySpec (** spec_data )
474516 payload = spec .model_dump (exclude_none = True )
475517 try :
476518 response = self .client .request (
0 commit comments