memmachine-server 0.3.9__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/PKG-INFO +9 -7
  2. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/pyproject.toml +25 -6
  3. memmachine_server-0.4.0/server_tests/memmachine_server/common/api/test_version.py +8 -0
  4. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_configuration.py +65 -0
  5. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_database_conf.py +64 -7
  6. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_mixin_confs.py +1 -1
  7. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_semantic_conf.py +39 -0
  8. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/embedder/test_openai_embedder.py +42 -2
  9. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/episode_store/test_count_caching_episode_storage.py +4 -2
  10. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/episode_store/test_episode_model.py +30 -3
  11. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/episode_store/test_episode_storage.py +226 -14
  12. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/episode_store/test_sqlalchemy_episode_store_startup.py +12 -2
  13. memmachine_server-0.4.0/server_tests/memmachine_server/common/episode_store/test_uuid_contract.py +45 -0
  14. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/filter/test_filter_parser.py +31 -0
  15. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/filter/test_sql_filter_util.py +16 -0
  16. memmachine_server-0.4.0/server_tests/memmachine_server/common/language_model/test_litellm_language_model.py +324 -0
  17. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/language_model/test_openai_chat_completions_language_model.py +4 -6
  18. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/language_model/test_openai_responses_language_model.py +4 -6
  19. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/resource_manager/test_database_manager.py +211 -9
  20. memmachine_server-0.4.0/server_tests/memmachine_server/common/resource_manager/test_metrics_factory_wiring.py +178 -0
  21. memmachine_server-0.4.0/server_tests/memmachine_server/common/resource_manager/test_resource_manager.py +380 -0
  22. memmachine_server-0.4.0/server_tests/memmachine_server/common/resource_manager/test_semantic_manager_config_storage.py +27 -0
  23. memmachine_server-0.4.0/server_tests/memmachine_server/common/resource_manager/test_semantic_manager_vector_store.py +54 -0
  24. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/session_manager/test_session_manager.py +58 -25
  25. memmachine_server-0.4.0/server_tests/memmachine_server/common/sql_lease_lock/test_postgres.py +83 -0
  26. memmachine_server-0.4.0/server_tests/memmachine_server/common/sql_lease_lock/test_service.py +874 -0
  27. memmachine_server-0.4.0/server_tests/memmachine_server/common/test_neo4j_utils.py +33 -0
  28. memmachine_server-0.4.0/server_tests/memmachine_server/common/vector_store/test_milvus_vector_store.py +557 -0
  29. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/test_qdrant_vector_store.py +117 -91
  30. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/conftest.py +30 -30
  31. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/declarative_memory/test_declarative_memory.py +86 -82
  32. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/declarative_memory/test_string_from_episode_context.py +2 -1
  33. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/deriver/test_text_deriver.py +49 -7
  34. memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/test_sqlalchemy_segment_store.py +3396 -0
  35. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/test_event_memory.py +90 -0
  36. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/long_term_memory/test_episode_to_event.py +4 -8
  37. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/long_term_memory/test_event_backend_wiring.py +419 -58
  38. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/long_term_memory/test_long_term_memory.py +17 -18
  39. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/long_term_memory/test_service_locator.py +19 -9
  40. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/short_term_memory/test_short_term_memory.py +99 -2
  41. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/test_episodic_memory.py +0 -1
  42. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/test_episodic_memory_manager.py +55 -18
  43. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/test_instance_lru_cache.py +22 -4
  44. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/installation/test_configuration_wizard.py +58 -8
  45. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/installation/test_memmachine_configure.py +26 -21
  46. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/main/test_memachine.py +1 -1
  47. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/main/test_memmachine_delete_session.py +6 -4
  48. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/main/test_memmachine_mock.py +717 -24
  49. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/retrieval_agent/test_retrieval_agent.py +24 -2
  50. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/cluster_store/test_cluster_state_storage.py +58 -22
  51. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/mock_semantic_memory_objects.py +25 -9
  52. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/in_memory_semantic_storage.py +52 -27
  53. memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory/storage/test_history_ordering.py +258 -0
  54. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/test_semantic_storage.py +20 -16
  55. memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory/storage/test_vector_store_semantic_storage.py +144 -0
  56. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_cluster_manager.py +17 -12
  57. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_cluster_splitter.py +30 -17
  58. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_history_cleanup.py +3 -1
  59. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_ingestion.py +232 -12
  60. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_memory.py +63 -1
  61. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_memory_background.py +24 -63
  62. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_model.py +7 -6
  63. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_session_manager.py +123 -10
  64. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_config_router.py +6 -0
  65. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_config_service.py +65 -0
  66. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_mcp.py +2 -2
  67. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_router.py +27 -19
  68. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_service.py +53 -0
  69. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/api_v2/test_spec.py +71 -8
  70. memmachine_server-0.4.0/server_tests/memmachine_server/server/prompt/__init__.py +0 -0
  71. memmachine_server-0.4.0/server_tests/memmachine_server/server/test_multiproc_dir.py +129 -0
  72. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/__init__.py +123 -15
  73. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/database_conf.py +100 -10
  74. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/language_model_conf.py +93 -1
  75. memmachine_server-0.4.0/src/memmachine_server/common/configuration/retrieval_config.py +59 -0
  76. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/embedder/amazon_bedrock_embedder.py +20 -5
  77. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/embedder/openai_embedder.py +29 -26
  78. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/embedder/sentence_transformer_embedder.py +22 -8
  79. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/episode_store/__init__.py +0 -2
  80. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/episode_store/count_caching_episode_storage.py +5 -5
  81. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/episode_store/episode_model.py +6 -7
  82. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/episode_store/episode_sqlalchemy_store.py +67 -51
  83. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/episode_store/episode_storage.py +5 -5
  84. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/errors.py +4 -0
  85. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/filter/filter_parser.py +40 -2
  86. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/filter/sql_filter_util.py +31 -4
  87. memmachine_server-0.4.0/src/memmachine_server/common/language_model/litellm_language_model.py +227 -0
  88. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/language_model/openai_responses_language_model.py +1 -1
  89. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/metrics_factory/__init__.py +3 -0
  90. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/metrics_factory/operation_tracker.py +2 -2
  91. memmachine_server-0.4.0/src/memmachine_server/common/metrics_factory/timed.py +54 -0
  92. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/neo4j_utils.py +6 -1
  93. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/amazon_bedrock_reranker.py +1 -1
  94. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/__init__.py +5 -0
  95. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/database_manager.py +158 -18
  96. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/language_model_manager.py +44 -4
  97. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/reranker_manager.py +1 -2
  98. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/resource_manager.py +86 -6
  99. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/semantic_manager.py +88 -3
  100. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/session_manager/session_data_manager.py +2 -2
  101. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/session_manager/session_data_manager_sql_impl.py +33 -11
  102. memmachine_server-0.4.0/src/memmachine_server/common/sql_lease_lock/__init__.py +17 -0
  103. memmachine_server-0.4.0/src/memmachine_server/common/sql_lease_lock/_store.py +192 -0
  104. memmachine_server-0.4.0/src/memmachine_server/common/sql_lease_lock/service.py +348 -0
  105. memmachine_server-0.4.0/src/memmachine_server/common/vector_store/milvus_vector_store.py +858 -0
  106. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/qdrant_vector_store.py +35 -80
  107. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/sqlite_vector_store.py +3 -1
  108. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/declarative_memory/data_types.py +2 -1
  109. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/declarative_memory/declarative_memory.py +10 -10
  110. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/episodic_memory.py +3 -2
  111. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/episodic_memory_manager.py +17 -15
  112. memmachine_server-0.4.0/src/memmachine_server/episodic_memory/event_memory/deriver/deriver.py +31 -0
  113. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/deriver/text_deriver.py +39 -4
  114. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/event_memory.py +23 -64
  115. memmachine_server-0.4.0/src/memmachine_server/episodic_memory/event_memory/formatting.py +59 -0
  116. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segment_store/__init__.py +4 -0
  117. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segment_store/data_types.py +21 -0
  118. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segment_store/segment_store.py +51 -3
  119. memmachine_server-0.4.0/src/memmachine_server/episodic_memory/event_memory/segment_store/sqlalchemy_segment_store.py +1432 -0
  120. memmachine_server-0.4.0/src/memmachine_server/episodic_memory/event_memory/segment_store/utils.py +34 -0
  121. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segmenter/passthrough_segmenter.py +7 -1
  122. memmachine_server-0.4.0/src/memmachine_server/episodic_memory/event_memory/segmenter/segmenter.py +31 -0
  123. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segmenter/text_segmenter.py +7 -1
  124. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/instance_lru_cache.py +17 -3
  125. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/long_term_memory/long_term_memory.py +169 -16
  126. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/long_term_memory/service_locator.py +17 -14
  127. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/short_term_memory/short_term_memory.py +15 -4
  128. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/installation/configuration_wizard.py +115 -61
  129. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/main/memmachine.py +129 -46
  130. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/agents/__init__.py +2 -0
  131. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/agents/coq_agent.py +2 -2
  132. memmachine_server-0.4.0/src/memmachine_server/retrieval_agent/agents/decomposer/__init__.py +32 -0
  133. memmachine_server-0.4.0/src/memmachine_server/retrieval_agent/agents/decomposer/decomposer.py +812 -0
  134. memmachine_server-0.4.0/src/memmachine_server/retrieval_agent/agents/rarag_query_agent.py +491 -0
  135. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/common/agent_api.py +3 -3
  136. memmachine_server-0.4.0/src/memmachine_server/retrieval_agent/service_locator.py +95 -0
  137. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_manager.py +4 -3
  138. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_splitter.py +13 -18
  139. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_store/cluster_store_sqlalchemy.py +11 -15
  140. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/semantic_ingestion.py +48 -29
  141. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/semantic_llm.py +2 -2
  142. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/semantic_memory.py +36 -10
  143. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/semantic_model.py +2 -2
  144. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/semantic_session_manager.py +13 -6
  145. memmachine_server-0.4.0/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/e8d4a37b69f2_add_episode_order_to_history.py +28 -0
  146. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/neo4j_semantic_storage.py +64 -14
  147. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/sqlalchemy_pgvector_semantic.py +59 -17
  148. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/storage_base.py +27 -8
  149. memmachine_server-0.4.0/src/memmachine_server/semantic_memory/storage/vector_store_semantic_storage.py +911 -0
  150. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/config_service.py +39 -1
  151. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/mcp.py +6 -6
  152. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/router.py +18 -2
  153. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/app.py +85 -18
  154. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/PKG-INFO +9 -7
  155. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/SOURCES.txt +28 -0
  156. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/requires.txt +10 -6
  157. memmachine_server-0.4.0/src/memmachine_server.egg-info/scm_file_list.json +367 -0
  158. memmachine_server-0.4.0/src/memmachine_server.egg-info/scm_version.json +8 -0
  159. memmachine_server-0.3.9/server_tests/memmachine_server/common/api/test_version.py +0 -41
  160. memmachine_server-0.3.9/server_tests/memmachine_server/common/resource_manager/test_resource_manager.py +0 -181
  161. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/test_sqlalchemy_segment_store.py +0 -998
  162. memmachine_server-0.3.9/src/memmachine_server/common/configuration/retrieval_config.py +0 -26
  163. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/deriver/deriver.py +0 -17
  164. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segment_store/sqlalchemy_segment_store.py +0 -1076
  165. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segmenter/segmenter.py +0 -17
  166. memmachine_server-0.3.9/src/memmachine_server/retrieval_agent/service_locator.py +0 -57
  167. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/LICENSE +0 -0
  168. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/README.md +0 -0
  169. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/__init__.py +0 -0
  170. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/__init__.py +0 -0
  171. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/__init__.py +0 -0
  172. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/api/__init__.py +0 -0
  173. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/__init__.py +0 -0
  174. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_embedder_conf.py +0 -0
  175. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_episodic_config.py +0 -0
  176. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_language_model_conf.py +0 -0
  177. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_log_conf.py +0 -0
  178. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_prompt_conf.py +0 -0
  179. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_reranker_conf.py +0 -0
  180. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/configuration/test_server_conf.py +0 -0
  181. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/embedder/__init__.py +0 -0
  182. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/embedder/test_amazon_bedrock_embedder.py +0 -0
  183. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/embedder/test_embedder.py +0 -0
  184. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/embedder/test_sentence_transformer_embedder.py +0 -0
  185. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/episode_store/__init__.py +0 -0
  186. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/filter/__init__.py +0 -0
  187. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/language_model/__init__.py +0 -0
  188. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/payload_codec/__init__.py +0 -0
  189. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/payload_codec/test_payload_codec.py +0 -0
  190. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/payload_codec/test_payload_codec_config.py +0 -0
  191. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/__init__.py +0 -0
  192. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/fake_embedder.py +0 -0
  193. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_amazon_bedrock_reranker.py +0 -0
  194. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_bm25_reranker.py +0 -0
  195. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_cohere_reranker.py +0 -0
  196. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_cross_encoder_reranker.py +0 -0
  197. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_embedder_reranker.py +0 -0
  198. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_identity_reranker.py +0 -0
  199. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/reranker/test_rrf_hybrid_reranker.py +0 -0
  200. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/resource_manager/__init__.py +0 -0
  201. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/resource_manager/test_embedder_manager.py +0 -0
  202. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/resource_manager/test_language_model_manager.py +0 -0
  203. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/resource_manager/test_reranker_manager.py +0 -0
  204. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/session_manager/__init__.py +0 -0
  205. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/session_manager/test_session_manager_migration.py +0 -0
  206. {memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_graph_store → memmachine_server-0.4.0/server_tests/memmachine_server/common/sql_lease_lock}/__init__.py +0 -0
  207. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/test_properties_json.py +0 -0
  208. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/test_rw_locks.py +0 -0
  209. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/test_utils.py +0 -0
  210. {memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store → memmachine_server-0.4.0/server_tests/memmachine_server/common/vector_graph_store}/__init__.py +0 -0
  211. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_graph_store/test_nebula_graph_vector_graph_store.py +0 -0
  212. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_graph_store/test_neo4j_vector_graph_store.py +0 -0
  213. {memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/vector_search_engine → memmachine_server-0.4.0/server_tests/memmachine_server/common/vector_store}/__init__.py +0 -0
  214. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/in_memory_vector_store_collection.py +0 -0
  215. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/test_sqlite_vec_vector_store.py +0 -0
  216. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/test_sqlite_vector_store.py +0 -0
  217. {memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory → memmachine_server-0.4.0/server_tests/memmachine_server/common/vector_store/vector_search_engine}/__init__.py +0 -0
  218. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/vector_search_engine/test_hnswlib_engine.py +0 -0
  219. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/common/vector_store/vector_search_engine/test_usearch_engine.py +0 -0
  220. {memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/declarative_memory → memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory}/__init__.py +0 -0
  221. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/conftest.py +0 -0
  222. {memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory → memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory/declarative_memory}/__init__.py +0 -0
  223. {memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory → memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory/event_memory}/__init__.py +0 -0
  224. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/conftest.py +0 -0
  225. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/deriver/__init__.py +0 -0
  226. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/__init__.py +0 -0
  227. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/test_data_types.py +0 -0
  228. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/__init__.py +0 -0
  229. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/test_passthrough_segmenter.py +0 -0
  230. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/test_text_segmenter.py +0 -0
  231. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/episodic_memory/event_memory/test_data_types.py +0 -0
  232. {memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/short_term_memory → memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory/long_term_memory}/__init__.py +0 -0
  233. {memmachine_server-0.3.9/server_tests/memmachine_server/installation → memmachine_server-0.4.0/server_tests/memmachine_server/episodic_memory/short_term_memory}/__init__.py +0 -0
  234. {memmachine_server-0.3.9/server_tests/memmachine_server/main → memmachine_server-0.4.0/server_tests/memmachine_server/installation}/__init__.py +0 -0
  235. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/installation/test_utilities.py +0 -0
  236. {memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory → memmachine_server-0.4.0/server_tests/memmachine_server/main}/__init__.py +0 -0
  237. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/main/conftest.py +0 -0
  238. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/main/test_memmachine_integration.py +0 -0
  239. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/retrieval_agent/__init__.py +0 -0
  240. {memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/config_store → memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory}/__init__.py +0 -0
  241. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/cluster_store/__init__.py +0 -0
  242. {memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/storage → memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory/config_store}/__init__.py +0 -0
  243. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/config_store/test_caching_semantic_config_storage.py +0 -0
  244. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/config_store/test_semantic_config_storage.py +0 -0
  245. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/conftest.py +0 -0
  246. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/semantic_test_utils.py +0 -0
  247. {memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/storage/alembic_pg → memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory/storage}/__init__.py +0 -0
  248. {memmachine_server-0.3.9/server_tests/memmachine_server/server → memmachine_server-0.4.0/server_tests/memmachine_server/semantic_memory/storage/alembic_pg}/__init__.py +0 -0
  249. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/helpers.py +0 -0
  250. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/original_schema.sql +0 -0
  251. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/test_set_id_migration.py +0 -0
  252. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/test_sqlalchemy_vs_alembic.py +0 -0
  253. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/conftest.py +0 -0
  254. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/storage/test_text_sanitizer.py +0 -0
  255. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_llm.py +0 -0
  256. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_llm_integration.py +0 -0
  257. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/semantic_memory/test_semantic_memory_integration.py +0 -0
  258. {memmachine_server-0.3.9/server_tests/memmachine_server/server/api_v2 → memmachine_server-0.4.0/server_tests/memmachine_server/server}/__init__.py +0 -0
  259. {memmachine_server-0.3.9/server_tests/memmachine_server/server/prompt → memmachine_server-0.4.0/server_tests/memmachine_server/server/api_v2}/__init__.py +0 -0
  260. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/prompt/test_prompt_utilities.py +0 -0
  261. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/server/test_middleware.py +0 -0
  262. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/server_tests/memmachine_server/test_data/longmemeval_snippet.json +0 -0
  263. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/setup.cfg +0 -0
  264. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/__init__.py +0 -0
  265. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/__init__.py +0 -0
  266. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/api/__init__.py +0 -0
  267. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/api/version.py +0 -0
  268. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/default_episode_summary_system_prompt.txt +0 -0
  269. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/default_episode_summary_user_prompt.txt +0 -0
  270. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/embedder_conf.py +0 -0
  271. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/episodic_config.py +0 -0
  272. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/log_conf.py +0 -0
  273. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/mixin_confs.py +0 -0
  274. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/configuration/reranker_conf.py +0 -0
  275. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/data_types.py +0 -0
  276. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/embedder/__init__.py +0 -0
  277. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/embedder/embedder.py +0 -0
  278. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/filter/__init__.py +0 -0
  279. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/language_model/__init__.py +0 -0
  280. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/language_model/amazon_bedrock_language_model.py +0 -0
  281. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/language_model/language_model.py +0 -0
  282. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/language_model/openai_chat_completions_language_model.py +0 -0
  283. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/metrics_factory/metrics_factory.py +0 -0
  284. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/metrics_factory/prometheus_metrics_factory.py +0 -0
  285. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/payload_codec/__init__.py +0 -0
  286. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/payload_codec/payload_codec.py +0 -0
  287. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/payload_codec/payload_codec_config.py +0 -0
  288. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/payload_codec/plaintext_payload_codec.py +0 -0
  289. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/properties_json.py +0 -0
  290. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/__init__.py +0 -0
  291. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/bm25_reranker.py +0 -0
  292. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/cohere_reranker.py +0 -0
  293. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/cross_encoder_reranker.py +0 -0
  294. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/embedder_reranker.py +0 -0
  295. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/identity_reranker.py +0 -0
  296. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/reranker.py +0 -0
  297. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/reranker/rrf_hybrid_reranker.py +0 -0
  298. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/base_manager.py +0 -0
  299. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/resource_manager/embedder_manager.py +0 -0
  300. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/rw_locks.py +0 -0
  301. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/session_manager/__init__.py +0 -0
  302. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/utils.py +0 -0
  303. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_graph_store/__init__.py +0 -0
  304. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_graph_store/data_types.py +0 -0
  305. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_graph_store/nebula_graph_vector_graph_store.py +0 -0
  306. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_graph_store/neo4j_vector_graph_store.py +0 -0
  307. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_graph_store/vector_graph_store.py +0 -0
  308. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/__init__.py +0 -0
  309. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/data_types.py +0 -0
  310. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/sqlite_vec_vector_store.py +0 -0
  311. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/utils.py +0 -0
  312. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/vector_search_engine/__init__.py +0 -0
  313. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/vector_search_engine/hnswlib_engine.py +0 -0
  314. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/vector_search_engine/usearch_engine.py +0 -0
  315. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/vector_search_engine/vector_search_engine.py +0 -0
  316. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/common/vector_store/vector_store.py +0 -0
  317. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/__init__.py +0 -0
  318. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/declarative_memory/__init__.py +0 -0
  319. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/__init__.py +0 -0
  320. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/data_types.py +0 -0
  321. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/deriver/__init__.py +0 -0
  322. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/event_memory/segmenter/__init__.py +0 -0
  323. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/long_term_memory/__init__.py +0 -0
  324. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/service_locator.py +0 -0
  325. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/short_term_memory/__init__.py +0 -0
  326. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/episodic_memory/short_term_memory/service_locator.py +0 -0
  327. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/installation/__init__.py +0 -0
  328. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/installation/memmachine_configure.py +0 -0
  329. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/installation/utilities.py +0 -0
  330. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/main/__init__.py +0 -0
  331. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/__init__.py +0 -0
  332. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/agents/memmachine_retriever.py +0 -0
  333. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/agents/split_query_agent.py +0 -0
  334. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/agents/tool_select_agent.py +0 -0
  335. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/retrieval_agent/common/__init__.py +0 -0
  336. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/__init__.py +0 -0
  337. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_store/__init__.py +0 -0
  338. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_store/cluster_store.py +0 -0
  339. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/cluster_store/in_memory_cluster_store.py +0 -0
  340. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/config_store/__init__.py +0 -0
  341. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/config_store/caching_semantic_config_storage.py +0 -0
  342. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/config_store/config_store.py +0 -0
  343. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/config_store/config_store_sqlalchemy.py +0 -0
  344. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/__init__.py +0 -0
  345. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/__init__.py +0 -0
  346. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/env.py +0 -0
  347. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/script.py.mako +0 -0
  348. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/001_initial_migration.py +0 -0
  349. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/3d6aaebdc526_sync_sqlalchemy_schema.py +0 -0
  350. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/62dff1150a46_add_created_at_to_history_add.py +0 -0
  351. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/79f00a9f2409_change_history_id_to_string.py +0 -0
  352. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/843f6d216d10_rename_semantic_type_to_semantic_.py +0 -0
  353. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/__init__.py +0 -0
  354. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/adb5618bd4ee_remove_history_table.py +0 -0
  355. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/b65f7f4a9d2c_migrate_legacy_set_ids.py +0 -0
  356. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/c7a2f8e31b90_add_ingested_composite_index.py +0 -0
  357. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/d1a9df11343b_add_indexes.py +0 -0
  358. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/storage/text_sanitizer.py +0 -0
  359. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/util/__init__.py +0 -0
  360. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/semantic_memory/util/semantic_prompt_template.py +0 -0
  361. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/__init__.py +0 -0
  362. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/__init__.py +0 -0
  363. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/config_router.py +0 -0
  364. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/exceptions.py +0 -0
  365. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/api_v2/service.py +0 -0
  366. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/diagnostics.py +0 -0
  367. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/mcp_http.py +0 -0
  368. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/mcp_stdio.py +0 -0
  369. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/middleware.py +0 -0
  370. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/__init__.py +0 -0
  371. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/coding_style_prompt.py +0 -0
  372. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/crm_prompt.py +0 -0
  373. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/default_prompts.py +0 -0
  374. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/financial_analyst_prompt.py +0 -0
  375. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/health_assistant_prompt.py +0 -0
  376. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/profile_prompt.py +0 -0
  377. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/prompt_utilities.py +0 -0
  378. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server/server/prompt/writing_assistant_prompt.py +0 -0
  379. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/dependency_links.txt +0 -0
  380. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/entry_points.txt +0 -0
  381. {memmachine_server-0.3.9 → memmachine_server-0.4.0}/src/memmachine_server.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memmachine-server
3
- Version: 0.3.9
3
+ Version: 0.4.0
4
4
  Summary: MemMachine Server - The complete MemMachine memory system server with episodic and profile memory
5
5
  Author-email: MemMachine <noreply@memmachine.ai>
6
6
  License-Expression: Apache-2.0
@@ -20,9 +20,8 @@ Requires-Dist: alembic>=1.17.1
20
20
  Requires-Dist: asyncpg>=0.31.0
21
21
  Requires-Dist: aiosqlite>=0.20.0
22
22
  Requires-Dist: boto3>=1.40.40
23
- Requires-Dist: boto3-stubs==1.40.64
24
23
  Requires-Dist: cohere>=5.20.0
25
- Requires-Dist: dotenv>=0.9.9
24
+ Requires-Dist: python-dotenv>=1.2.2
26
25
  Requires-Dist: fastapi>=0.116.1
27
26
  Requires-Dist: fastmcp>=3.2.0
28
27
  Requires-Dist: instructor[bedrock]>=1.12.0
@@ -36,12 +35,10 @@ Requires-Dist: prometheus-client>=0.22.1
36
35
  Requires-Dist: pydantic>=2.11.7
37
36
  Requires-Dist: pyyaml>=6.0.2
38
37
  Requires-Dist: rank-bm25>=0.2.2
39
- Requires-Dist: regex>=2023.0.0
40
38
  Requires-Dist: sqlite-vec>=0.1.9
41
- Requires-Dist: sqlalchemy>=2.0.43
39
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.43
42
40
  Requires-Dist: usearch>=2.25.1
43
41
  Requires-Dist: uvicorn>=0.35.0
44
- Requires-Dist: greenlet>=3.2.4
45
42
  Requires-Dist: tzdata>=2024.1; sys_platform == "win32"
46
43
  Requires-Dist: psutil>=7.1.0
47
44
  Requires-Dist: langchain-text-splitters>=1.1.1
@@ -51,9 +48,14 @@ Requires-Dist: sentence-transformers>=5.1.0; extra == "gpu"
51
48
  Provides-Extra: hnswlib
52
49
  Requires-Dist: hnswlib>=0.8.0; extra == "hnswlib"
53
50
  Provides-Extra: nebula
54
- Requires-Dist: nebula5-python>=5.2.1; extra == "nebula"
51
+ Requires-Dist: nebula5-python<5.3,>=5.2.1; extra == "nebula"
55
52
  Provides-Extra: qdrant
56
53
  Requires-Dist: qdrant-client>=1.17.0; extra == "qdrant"
54
+ Provides-Extra: milvus
55
+ Requires-Dist: pymilvus>=3.0.0; extra == "milvus"
56
+ Requires-Dist: milvus-lite>=3.0.0; extra == "milvus"
57
+ Provides-Extra: litellm
58
+ Requires-Dist: litellm>=1.93.0; extra == "litellm"
57
59
  Dynamic: license-file
58
60
 
59
61
  # MemMachine
@@ -11,9 +11,8 @@ dependencies = [
11
11
  "asyncpg>=0.31.0",
12
12
  "aiosqlite>=0.20.0",
13
13
  "boto3>=1.40.40",
14
- "boto3-stubs==1.40.64",
15
14
  "cohere>=5.20.0",
16
- "dotenv>=0.9.9",
15
+ "python-dotenv>=1.2.2",
17
16
  "fastapi>=0.116.1",
18
17
  "fastmcp>=3.2.0",
19
18
  "instructor[bedrock]>=1.12.0",
@@ -27,12 +26,10 @@ dependencies = [
27
26
  "pydantic>=2.11.7",
28
27
  "pyyaml>=6.0.2",
29
28
  "rank-bm25>=0.2.2",
30
- "regex>=2023.0.0",
31
29
  "sqlite-vec>=0.1.9",
32
- "sqlalchemy>=2.0.43",
30
+ "sqlalchemy[asyncio]>=2.0.43",
33
31
  "usearch>=2.25.1",
34
32
  "uvicorn>=0.35.0",
35
- "greenlet>=3.2.4",
36
33
  "tzdata>=2024.1 ; sys_platform == 'win32'",
37
34
  "psutil>=7.1.0",
38
35
  "langchain-text-splitters>=1.1.1",
@@ -62,11 +59,25 @@ hnswlib = [
62
59
  "hnswlib>=0.8.0",
63
60
  ]
64
61
  nebula = [
65
- "nebula5-python>=5.2.1",
62
+ # 5.3 removed the public async client this backend is written against:
63
+ # NebulaAsyncClient, SessionConfig and SessionPoolConfig are gone, and the
64
+ # AsyncNebulaClient that replaces NebulaAsyncClient has no public way to
65
+ # open a connection -- only the private _init_client(). Until it does, the
66
+ # async backend cannot move past 5.2.
67
+ "nebula5-python>=5.2.1,<5.3",
66
68
  ]
67
69
  qdrant = [
68
70
  "qdrant-client>=1.17.0",
69
71
  ]
72
+ milvus = [
73
+ "pymilvus>=3.0.0",
74
+ "milvus-lite>=3.0.0",
75
+ ]
76
+ litellm = [
77
+ # 1.93 is the first release that supports Python 3.14; 1.83.8 through
78
+ # 1.92 cap themselves at <3.14.
79
+ "litellm>=1.93.0",
80
+ ]
70
81
 
71
82
  [project.scripts]
72
83
  memmachine-server = "memmachine_server.server.app:main"
@@ -98,6 +109,14 @@ extra-paths = ["../common/src", "../client/src"]
98
109
  [tool.ty.src]
99
110
  exclude = ["build/**"]
100
111
 
112
+ [tool.ty.analysis]
113
+ # spaCy is an optional dependency (the ``multihop`` dependency-group) and is not
114
+ # installed in the type-checking environments (notably the Python 3.14 matrix,
115
+ # where spaCy 3.8.x has no wheels). Suppress unresolved-import for spaCy so the
116
+ # static checks pass without it; the decomposer falls back to LLM splitting at
117
+ # runtime when spaCy is absent.
118
+ allowed-unresolved-imports = ["spacy.**"]
119
+
101
120
  [tool.ruff]
102
121
  extend = "../../pyproject.toml"
103
122
  target-version = "py312"
@@ -0,0 +1,8 @@
1
+ """test version information."""
2
+
3
+ from memmachine_common.api.spec import Version
4
+
5
+
6
+ def test_version_string():
7
+ version = Version(server_version="0.2.2", client_version="0.2.2")
8
+ assert str(version) == "server: 0.2.2\nclient: 0.2.2"
@@ -390,3 +390,68 @@ def test_existing_sample_yaml_loads_as_declarative_via_full_configuration():
390
390
  assert isinstance(ltm_merged, DeclarativeLongTermMemoryConf)
391
391
  assert ltm_merged.embedder == "openai_embedder"
392
392
  assert ltm_merged.vector_graph_store == "my_storage_id"
393
+
394
+
395
+ def _sample_config_data() -> dict:
396
+ config_path = find_config_file("episodic_memory_config.cpu.sample")
397
+ return yaml.safe_load(config_path.read_text(encoding="utf-8"))
398
+
399
+
400
+ def test_configuration_loads_without_semantic_memory_section():
401
+ data = _sample_config_data()
402
+ data.pop("semantic_memory")
403
+
404
+ conf = Configuration(**data)
405
+
406
+ assert conf.semantic_memory.enabled is False
407
+ assert conf.semantic_memory.config_database is None
408
+
409
+
410
+ def test_configuration_semantic_memory_disabled_with_enabled_false_alone():
411
+ data = _sample_config_data()
412
+ data["semantic_memory"] = {"enabled": False}
413
+
414
+ conf = Configuration(**data)
415
+
416
+ assert conf.semantic_memory.enabled is False
417
+
418
+
419
+ @pytest.mark.parametrize("section", [None, {}])
420
+ def test_configuration_empty_semantic_section_is_disabled(section, caplog):
421
+ """A null or empty section is disabled silently, like an omitted one."""
422
+ data = _sample_config_data()
423
+ data["semantic_memory"] = section
424
+
425
+ with caplog.at_level(logging.WARNING):
426
+ conf = Configuration(**data)
427
+
428
+ assert conf.semantic_memory.enabled is False
429
+ assert "auto-disabled" not in caplog.text
430
+
431
+
432
+ def test_disabled_semantic_memory_round_trips_through_yaml():
433
+ """A complete-but-disabled section keeps enabled: false across save + reload."""
434
+ data = _sample_config_data()
435
+ data["semantic_memory"]["enabled"] = False
436
+ conf = Configuration(**data)
437
+
438
+ dumped = yaml.safe_load(conf.to_yaml())
439
+ conf_cp = Configuration(**dumped)
440
+
441
+ assert dumped["semantic_memory"]["enabled"] is False
442
+ assert dumped["semantic_memory"]["config_database"] == "profile_storage"
443
+ assert conf_cp.semantic_memory.enabled is False
444
+
445
+
446
+ def test_bare_disabled_semantic_memory_round_trips_through_yaml():
447
+ """The minimal {enabled: false} section survives the serializer's empty-value drop."""
448
+ data = _sample_config_data()
449
+ data["semantic_memory"] = {"enabled": False}
450
+ conf = Configuration(**data)
451
+
452
+ dumped = yaml.safe_load(conf.to_yaml())
453
+ conf_cp = Configuration(**dumped)
454
+
455
+ assert dumped["semantic_memory"]["enabled"] is False
456
+ assert "config_database" not in dumped["semantic_memory"]
457
+ assert conf_cp.semantic_memory.enabled is False
@@ -4,6 +4,7 @@ from pydantic import SecretStr
4
4
 
5
5
  from memmachine_server.common.configuration.database_conf import (
6
6
  DatabasesConf,
7
+ MilvusConf,
7
8
  Neo4jConf,
8
9
  QdrantConf,
9
10
  SqlAlchemyConf,
@@ -46,6 +47,12 @@ def test_parse_supported_db_enums():
46
47
  assert qdrant_db.dialect is None
47
48
  assert qdrant_db.driver is None
48
49
 
50
+ milvus_db = SupportedDB.MILVUS
51
+ assert SupportedDB.from_provider("milvus") == milvus_db
52
+ assert milvus_db.conf_cls == MilvusConf
53
+ assert milvus_db.dialect is None
54
+ assert milvus_db.driver is None
55
+
49
56
  sqlite_vs_db = SupportedDB.SQLITE_VECTOR_STORE
50
57
  assert sqlite_vs_db.conf_cls == SQLiteVectorStoreConf
51
58
  assert sqlite_vs_db.dialect is None
@@ -113,10 +120,18 @@ def db_conf_dict() -> dict:
113
120
  "grpc_port": 6334,
114
121
  "prefer_grpc": True,
115
122
  "api_key": "test-key",
116
- "is_distributed": True,
117
123
  "registry_replication_factor": 3,
118
124
  },
119
125
  },
126
+ "my_milvus": {
127
+ "provider": "milvus",
128
+ "config": {
129
+ "uri": "https://example.zillizcloud.com",
130
+ "token": "test-token",
131
+ "db_name": "memory",
132
+ "consistency_level": "Strong",
133
+ },
134
+ },
120
135
  "my_sqlite_vs": {
121
136
  "provider": "sqlite_vector_store",
122
137
  "config": {
@@ -138,7 +153,13 @@ def db_conf_dict() -> dict:
138
153
 
139
154
  @pytest.fixture(autouse=True)
140
155
  def clear_env(monkeypatch):
141
- for var in ["MY_NEO4J_PASSWORD", "MY_DB_PASSWORD"]:
156
+ for var in [
157
+ "MY_NEO4J_PASSWORD",
158
+ "MY_DB_PASSWORD",
159
+ "MILVUS_URI",
160
+ "MILVUS_TOKEN",
161
+ "MILVUS_DB_NAME",
162
+ ]:
142
163
  monkeypatch.delenv(var, raising=False)
143
164
 
144
165
 
@@ -182,9 +203,16 @@ def test_parse_valid_storage_dict(db_conf_dict):
182
203
  assert qdrant_conf.grpc_port == 6334
183
204
  assert qdrant_conf.prefer_grpc is True
184
205
  assert qdrant_conf.api_key == SecretStr("test-key")
185
- assert qdrant_conf.is_distributed is True
186
206
  assert qdrant_conf.registry_replication_factor == 3
187
207
 
208
+ # Milvus check
209
+ milvus_conf = storage_conf.milvus_confs["my_milvus"]
210
+ assert isinstance(milvus_conf, MilvusConf)
211
+ assert milvus_conf.uri == "https://example.zillizcloud.com"
212
+ assert milvus_conf.token == SecretStr("test-token")
213
+ assert milvus_conf.db_name == "memory"
214
+ assert milvus_conf.consistency_level == "Strong"
215
+
188
216
  # SQLiteVectorStore (hnswlib engine)
189
217
  sqlite_vs_conf = storage_conf.sqlite_vector_store_confs["my_sqlite_vs"]
190
218
  assert isinstance(sqlite_vs_conf, SQLiteVectorStoreConf)
@@ -225,7 +253,7 @@ def test_parse_unknown_provider_raises():
225
253
  }
226
254
  message = (
227
255
  "Supported providers are: neo4j, postgres, sqlite, nebula_graph, qdrant, "
228
- "sqlite_vector_store, sqlite_vec_vector_store"
256
+ "milvus, sqlite_vector_store, sqlite_vec_vector_store"
229
257
  )
230
258
  with pytest.raises(ValueError, match=message):
231
259
  DatabasesConf.parse(input_dict)
@@ -238,6 +266,7 @@ def test_parse_empty_storage_returns_empty_conf():
238
266
  assert storage_conf.relational_db_confs == {}
239
267
  assert storage_conf.nebula_graph_confs == {}
240
268
  assert storage_conf.qdrant_confs == {}
269
+ assert storage_conf.milvus_confs == {}
241
270
  assert storage_conf.sqlite_vector_store_confs == {}
242
271
  assert storage_conf.sqlite_vec_vector_store_confs == {}
243
272
 
@@ -249,6 +278,35 @@ def test_serialize_deserialize_database_conf(db_conf_dict):
249
278
  assert conf == conf_cp
250
279
 
251
280
 
281
+ def test_milvus_conf_defaults():
282
+ conf = MilvusConf()
283
+ assert conf.uri == "./milvus.db"
284
+ assert conf.token == SecretStr("")
285
+ assert conf.db_name == ""
286
+ assert conf.consistency_level == "Session"
287
+
288
+
289
+ def test_milvus_conf_reads_env(monkeypatch):
290
+ monkeypatch.setenv("MILVUS_URI", "https://example.zillizcloud.com")
291
+ monkeypatch.setenv("MILVUS_TOKEN", "env-token")
292
+ monkeypatch.setenv("MILVUS_DB_NAME", "memory")
293
+ conf = MilvusConf(
294
+ uri="$MILVUS_URI",
295
+ token=SecretStr("${MILVUS_TOKEN}"),
296
+ db_name="$MILVUS_DB_NAME",
297
+ )
298
+ assert conf.uri == "https://example.zillizcloud.com"
299
+ assert conf.token == SecretStr("env-token")
300
+ assert conf.db_name == "memory"
301
+
302
+
303
+ def test_milvus_conf_rejects_invalid_values():
304
+ with pytest.raises(ValueError, match="non-empty 'uri'"):
305
+ MilvusConf(uri="")
306
+ with pytest.raises(ValueError, match="consistency_level"):
307
+ MilvusConf(consistency_level="Linearizable")
308
+
309
+
252
310
  def test_neo4j_pool_lifecycle_fields():
253
311
  # Defaults are None (use driver's internal defaults)
254
312
  conf = Neo4jConf()
@@ -304,7 +362,6 @@ def test_qdrant_conf_defaults():
304
362
  assert conf.grpc_port == 6334
305
363
  assert conf.prefer_grpc is False
306
364
  assert conf.https is False
307
- assert conf.is_distributed is False
308
365
  assert conf.registry_replication_factor == 1
309
366
  assert conf.api_key.get_secret_value() == ""
310
367
 
@@ -317,12 +374,12 @@ def test_qdrant_conf_api_key_from_env(monkeypatch):
317
374
 
318
375
  def test_qdrant_build_config():
319
376
  config = SupportedDB.QDRANT.build_config(
320
- {"host": "qdrant.local", "port": 9333, "is_distributed": True}
377
+ {"host": "qdrant.local", "port": 9333, "registry_replication_factor": 2}
321
378
  )
322
379
  assert isinstance(config, QdrantConf)
323
380
  assert config.host == "qdrant.local"
324
381
  assert config.port == 9333
325
- assert config.is_distributed is True
382
+ assert config.registry_replication_factor == 2
326
383
 
327
384
 
328
385
  def test_sqlite_vector_store_conf_defaults():
@@ -200,7 +200,7 @@ def test_password_mixin_without_env():
200
200
 
201
201
  def test_password_mixin_invalid_type():
202
202
  with pytest.raises(ValidationError) as exc:
203
- ApiKeyMixin(api_key=12345) # type: ignore
203
+ ApiKeyMixin.model_validate({"api_key": 12345})
204
204
  assert "should be a valid string" in str(exc.value)
205
205
 
206
206
 
@@ -1,6 +1,9 @@
1
1
  from datetime import timedelta
2
2
  from typing import Any
3
3
 
4
+ import pytest
5
+ from pydantic import ValidationError
6
+
4
7
  from memmachine_server.common.configuration import SemanticMemoryConf
5
8
 
6
9
 
@@ -31,3 +34,39 @@ def test_semantic_config_timedelta_float():
31
34
  conf = SemanticMemoryConf(**raw_conf)
32
35
  assert conf.ingestion_trigger_messages == 24
33
36
  assert conf.ingestion_trigger_age == timedelta(minutes=2, milliseconds=500)
37
+
38
+
39
+ def test_semantic_config_disabled_needs_no_config_database():
40
+ conf = SemanticMemoryConf(enabled=False)
41
+ assert conf.enabled is False
42
+ assert conf.config_database is None
43
+
44
+
45
+ def test_semantic_config_auto_disables_when_config_database_missing():
46
+ conf = SemanticMemoryConf(
47
+ database="database",
48
+ llm_model="llm",
49
+ embedding_model="embedding",
50
+ )
51
+ assert conf.enabled is False
52
+
53
+
54
+ def test_semantic_config_stays_enabled_when_complete():
55
+ conf = SemanticMemoryConf(
56
+ database="database",
57
+ config_database="database",
58
+ llm_model="llm",
59
+ embedding_model="embedding",
60
+ )
61
+ assert conf.enabled is True
62
+
63
+
64
+ def test_semantic_config_sets_missing_episode_grace_period():
65
+ conf = SemanticMemoryConf(
66
+ enabled=False,
67
+ missing_episode_grace_period_sec=45,
68
+ )
69
+ assert conf.missing_episode_grace_period_sec == 45
70
+
71
+ with pytest.raises(ValidationError):
72
+ SemanticMemoryConf(enabled=False, missing_episode_grace_period_sec=-1)
@@ -166,6 +166,46 @@ async def test_embed_oversized_input_with_no_max_input_length():
166
166
 
167
167
  assert len(result) == 1
168
168
  assert len(result[0]) == 256
169
- # The text must have been split: balanced chunks of 80,000 chars at limit
170
- # 75,000 produce two chunks of 40,000 each, each in its own cluster.
169
+ # The text must have been split: greedy chunks of 80,000 chars at limit
170
+ # 75,000 produce chunks of 75,000 and 5,000, each in its own cluster.
171
171
  assert mock_client.embeddings.create.call_count >= 2
172
+
173
+
174
+ @pytest.mark.asyncio
175
+ async def test_embed_max_input_length_above_request_cap():
176
+ """max_input_length above max_total_input_length_per_request must not raise.
177
+
178
+ A configured chunk limit above the per-request cap can never be honored
179
+ (no chunk larger than the cap fits in any request), so chunking clamps
180
+ to the cap instead of handing cluster_texts() a chunk it rejects.
181
+ """
182
+ mock_client = AsyncMock(spec=openai.AsyncOpenAI)
183
+
184
+ mock_embedding = MagicMock()
185
+ mock_embedding.embedding = [0.1] * 256
186
+
187
+ mock_response = MagicMock()
188
+ mock_response.data = [mock_embedding]
189
+ mock_response.usage.prompt_tokens = 10
190
+ mock_response.usage.total_tokens = 10
191
+
192
+ mock_client.embeddings.create = AsyncMock(return_value=mock_response)
193
+
194
+ embedder = OpenAIEmbedder(
195
+ OpenAIEmbedderParams(
196
+ client=mock_client,
197
+ model="test-model",
198
+ dimensions=256,
199
+ max_input_length=80_000, # above the 75,000-char per-request cap
200
+ )
201
+ )
202
+
203
+ long_text = "x" * 100_000
204
+
205
+ result = await embedder.ingest_embed([long_text])
206
+
207
+ assert len(result) == 1
208
+ assert len(result[0]) == 256
209
+ # Clamped to 75,000, the text splits into 75,000 + 25,000 chars, which
210
+ # exceed one request's total together, so each chunk gets its own call.
211
+ assert mock_client.embeddings.create.call_count == 2
@@ -1,4 +1,5 @@
1
1
  from unittest.mock import AsyncMock, MagicMock
2
+ from uuid import uuid4
2
3
 
3
4
  import pytest
4
5
 
@@ -80,7 +81,8 @@ async def test_deletes_clear_cached_counts(wrapped_store):
80
81
  filter_expr=session_filter
81
82
  )
82
83
 
83
- await storage.delete_episodes(["1", "2"])
84
+ ids = [uuid4(), uuid4()]
85
+ await storage.delete_episodes(ids)
84
86
  after_delete_ids = await storage.get_episode_messages_count(
85
87
  filter_expr=session_filter
86
88
  )
@@ -93,7 +95,7 @@ async def test_deletes_clear_cached_counts(wrapped_store):
93
95
  start_time=None,
94
96
  end_time=None,
95
97
  )
96
- wrapped_store.delete_episodes.assert_awaited_once_with(["1", "2"])
98
+ wrapped_store.delete_episodes.assert_awaited_once_with(ids)
97
99
 
98
100
 
99
101
  @pytest.mark.asyncio
@@ -2,11 +2,12 @@
2
2
 
3
3
  import json
4
4
  from datetime import UTC, datetime
5
+ from uuid import UUID
5
6
 
6
7
  import pytest
7
8
  from memmachine_common.api import EpisodeType
8
9
 
9
- from memmachine_server.common.episode_store import Episode
10
+ from memmachine_server.common.episode_store import Episode, EpisodeEntry
10
11
  from memmachine_server.common.episode_store.episode_model import (
11
12
  EpisodeResponse,
12
13
  episodes_to_string,
@@ -17,7 +18,7 @@ from memmachine_server.common.episode_store.episode_model import (
17
18
  def base_episode_data():
18
19
  """Provides common data for creating Episode instances."""
19
20
  return {
20
- "uid": "msg_123",
21
+ "uid": UUID("550e8400-e29b-41d4-a716-446655440123"),
21
22
  "content": "Hello world",
22
23
  "session_key": "session_abc",
23
24
  "created_at": datetime(2026, 1, 14, 13, 30, tzinfo=UTC), # Wednesday
@@ -32,11 +33,37 @@ def test_episodes_to_string_empty():
32
33
  assert episodes_to_string([]) == ""
33
34
 
34
35
 
36
+ def test_episode_entry_assigns_distinct_uuid4_ids_before_storage():
37
+ first = EpisodeEntry(content="first", producer_id="user", producer_role="user")
38
+ second = EpisodeEntry(content="second", producer_id="user", producer_role="user")
39
+
40
+ first_uuid = first.uid
41
+ second_uuid = second.uid
42
+
43
+ assert first_uuid.version == 4
44
+ assert second_uuid.version == 4
45
+ assert isinstance(first_uuid, UUID)
46
+ assert isinstance(second_uuid, UUID)
47
+ assert first.uid != second.uid
48
+
49
+
50
+ def test_episode_entry_preserves_explicit_internal_id():
51
+ supplied_id = "550e8400-e29b-41d4-a716-446655440000"
52
+ entry = EpisodeEntry(
53
+ uid=supplied_id,
54
+ content="message",
55
+ producer_id="user",
56
+ producer_role="user",
57
+ )
58
+
59
+ assert entry.uid == UUID(supplied_id)
60
+
61
+
35
62
  def test_episodes_to_string_multiple_mixed(base_episode_data):
36
63
  """Verify that multiple episodes are concatenated with newlines."""
37
64
  ep1 = Episode(**base_episode_data)
38
65
 
39
- base_episode_data["uid"] = "msg_456"
66
+ base_episode_data["uid"] = UUID("550e8400-e29b-41d4-a716-446655440456")
40
67
  base_episode_data["episode_type"] = EpisodeType.MESSAGE
41
68
  base_episode_data["content"] = "Brief summary"
42
69
  ep2 = Episode(**base_episode_data)