memmachine-server 0.3.7__tar.gz → 0.3.9__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 (351) hide show
  1. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/PKG-INFO +8 -2
  2. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/pyproject.toml +8 -1
  3. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_configuration.py +171 -0
  4. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_database_conf.py +100 -1
  5. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/episode_store/test_episode_model.py +49 -0
  6. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/episode_store/test_episode_storage.py +20 -0
  7. memmachine_server-0.3.9/server_tests/memmachine_server/common/payload_codec/__init__.py +1 -0
  8. memmachine_server-0.3.9/server_tests/memmachine_server/common/payload_codec/test_payload_codec.py +16 -0
  9. memmachine_server-0.3.9/server_tests/memmachine_server/common/payload_codec/test_payload_codec_config.py +18 -0
  10. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/test_database_manager.py +348 -18
  11. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/session_manager/test_session_manager.py +2 -2
  12. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/test_properties_json.py +47 -2
  13. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/test_rw_locks.py +35 -5
  14. memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/in_memory_vector_store_collection.py +213 -0
  15. memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/test_sqlite_vec_vector_store.py +1013 -0
  16. memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/test_sqlite_vector_store.py +1485 -0
  17. memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/vector_search_engine/test_hnswlib_engine.py +853 -0
  18. memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/vector_search_engine/test_usearch_engine.py +320 -0
  19. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/conftest.py +3 -6
  20. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/declarative_memory/test_string_from_episode_context.py +79 -0
  21. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/conftest.py +259 -0
  22. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/deriver/__init__.py +1 -0
  23. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/deriver/test_text_deriver.py +167 -0
  24. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/__init__.py +1 -0
  25. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/test_data_types.py +32 -0
  26. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segment_store/test_sqlalchemy_segment_store.py +998 -0
  27. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/__init__.py +1 -0
  28. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/test_passthrough_segmenter.py +92 -0
  29. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/segmenter/test_text_segmenter.py +148 -0
  30. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/test_data_types.py +181 -0
  31. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory/test_event_memory.py +950 -0
  32. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory/test_episode_to_event.py +163 -0
  33. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory/test_event_backend_wiring.py +583 -0
  34. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory/test_long_term_memory.py +315 -0
  35. memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory/test_service_locator.py +88 -0
  36. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/test_episodic_memory.py +1 -1
  37. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/installation/test_configuration_wizard.py +87 -3
  38. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/main/test_memmachine_mock.py +2 -0
  39. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_llm.py +130 -0
  40. memmachine_server-0.3.9/server_tests/memmachine_server/server/api_v2/__init__.py +0 -0
  41. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_config_router.py +23 -0
  42. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_config_service.py +136 -0
  43. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_router.py +122 -4
  44. memmachine_server-0.3.9/server_tests/memmachine_server/server/prompt/__init__.py +0 -0
  45. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/database_conf.py +98 -13
  46. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/episodic_config.py +215 -8
  47. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/retrieval_config.py +9 -1
  48. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/episode_store/count_caching_episode_storage.py +7 -5
  49. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/episode_store/episode_model.py +4 -2
  50. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/episode_store/episode_sqlalchemy_store.py +23 -0
  51. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/episode_store/episode_storage.py +13 -0
  52. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/errors.py +4 -0
  53. memmachine_server-0.3.9/src/memmachine_server/common/payload_codec/__init__.py +15 -0
  54. memmachine_server-0.3.9/src/memmachine_server/common/payload_codec/payload_codec.py +41 -0
  55. memmachine_server-0.3.9/src/memmachine_server/common/payload_codec/payload_codec_config.py +36 -0
  56. memmachine_server-0.3.9/src/memmachine_server/common/payload_codec/plaintext_payload_codec.py +17 -0
  57. memmachine_server-0.3.9/src/memmachine_server/common/properties_json.py +138 -0
  58. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/__init__.py +12 -0
  59. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/database_manager.py +171 -6
  60. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/embedder_manager.py +6 -1
  61. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/language_model_manager.py +12 -2
  62. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/resource_manager.py +26 -0
  63. memmachine_server-0.3.9/src/memmachine_server/common/rw_locks.py +94 -0
  64. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/utils.py +95 -0
  65. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/sqlite_vec_vector_store.py +720 -0
  66. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/sqlite_vector_store.py +1065 -0
  67. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/vector_search_engine/__init__.py +9 -0
  68. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/vector_search_engine/hnswlib_engine.py +340 -0
  69. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/vector_search_engine/usearch_engine.py +194 -0
  70. memmachine_server-0.3.9/src/memmachine_server/common/vector_store/vector_search_engine/vector_search_engine.py +140 -0
  71. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_store/vector_store.py +7 -1
  72. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/declarative_memory/declarative_memory.py +1 -1
  73. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/episodic_memory.py +1 -1
  74. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/__init__.py +1 -0
  75. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/data_types.py +220 -0
  76. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/deriver/__init__.py +7 -0
  77. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/deriver/deriver.py +17 -0
  78. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/deriver/text_deriver.py +80 -0
  79. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/event_memory.py +863 -0
  80. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segment_store/__init__.py +19 -0
  81. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segment_store/data_types.py +75 -0
  82. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segment_store/segment_store.py +228 -0
  83. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segment_store/sqlalchemy_segment_store.py +1076 -0
  84. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segmenter/__init__.py +7 -0
  85. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segmenter/passthrough_segmenter.py +32 -0
  86. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segmenter/segmenter.py +17 -0
  87. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/event_memory/segmenter/text_segmenter.py +92 -0
  88. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/long_term_memory/__init__.py +17 -0
  89. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/long_term_memory/long_term_memory.py +691 -0
  90. memmachine_server-0.3.9/src/memmachine_server/episodic_memory/long_term_memory/service_locator.py +234 -0
  91. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/installation/configuration_wizard.py +146 -3
  92. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/main/memmachine.py +43 -12
  93. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/semantic_llm.py +4 -2
  94. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/config_router.py +4 -0
  95. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/config_service.py +109 -20
  96. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/router.py +62 -14
  97. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server.egg-info/PKG-INFO +8 -2
  98. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server.egg-info/SOURCES.txt +49 -0
  99. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server.egg-info/requires.txt +8 -1
  100. memmachine_server-0.3.7/server_tests/memmachine_server/episodic_memory/long_term_memory/test_long_term_memory.py +0 -832
  101. memmachine_server-0.3.7/src/memmachine_server/common/properties_json.py +0 -93
  102. memmachine_server-0.3.7/src/memmachine_server/common/rw_locks.py +0 -90
  103. memmachine_server-0.3.7/src/memmachine_server/episodic_memory/long_term_memory/__init__.py +0 -8
  104. memmachine_server-0.3.7/src/memmachine_server/episodic_memory/long_term_memory/long_term_memory.py +0 -362
  105. memmachine_server-0.3.7/src/memmachine_server/episodic_memory/long_term_memory/service_locator.py +0 -27
  106. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/LICENSE +0 -0
  107. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/README.md +0 -0
  108. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/__init__.py +0 -0
  109. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/__init__.py +0 -0
  110. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/__init__.py +0 -0
  111. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/api/__init__.py +0 -0
  112. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/api/test_version.py +0 -0
  113. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/__init__.py +0 -0
  114. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_embedder_conf.py +0 -0
  115. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_episodic_config.py +0 -0
  116. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_language_model_conf.py +0 -0
  117. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_log_conf.py +0 -0
  118. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_mixin_confs.py +0 -0
  119. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_prompt_conf.py +0 -0
  120. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_reranker_conf.py +0 -0
  121. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_semantic_conf.py +0 -0
  122. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/configuration/test_server_conf.py +0 -0
  123. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/embedder/__init__.py +0 -0
  124. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/embedder/test_amazon_bedrock_embedder.py +0 -0
  125. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/embedder/test_embedder.py +0 -0
  126. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/embedder/test_openai_embedder.py +0 -0
  127. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/embedder/test_sentence_transformer_embedder.py +0 -0
  128. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/episode_store/__init__.py +0 -0
  129. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/episode_store/test_count_caching_episode_storage.py +0 -0
  130. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/episode_store/test_sqlalchemy_episode_store_startup.py +0 -0
  131. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/filter/__init__.py +0 -0
  132. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/filter/test_filter_parser.py +0 -0
  133. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/filter/test_sql_filter_util.py +0 -0
  134. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/language_model/__init__.py +0 -0
  135. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/language_model/test_openai_chat_completions_language_model.py +0 -0
  136. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/language_model/test_openai_responses_language_model.py +0 -0
  137. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/__init__.py +0 -0
  138. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/fake_embedder.py +0 -0
  139. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_amazon_bedrock_reranker.py +0 -0
  140. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_bm25_reranker.py +0 -0
  141. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_cohere_reranker.py +0 -0
  142. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_cross_encoder_reranker.py +0 -0
  143. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_embedder_reranker.py +0 -0
  144. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_identity_reranker.py +0 -0
  145. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/reranker/test_rrf_hybrid_reranker.py +0 -0
  146. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/__init__.py +0 -0
  147. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/test_embedder_manager.py +0 -0
  148. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/test_language_model_manager.py +0 -0
  149. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/test_reranker_manager.py +0 -0
  150. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/resource_manager/test_resource_manager.py +0 -0
  151. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/session_manager/__init__.py +0 -0
  152. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/session_manager/test_session_manager_migration.py +0 -0
  153. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/test_utils.py +0 -0
  154. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/vector_graph_store/__init__.py +0 -0
  155. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/vector_graph_store/test_nebula_graph_vector_graph_store.py +0 -0
  156. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/vector_graph_store/test_neo4j_vector_graph_store.py +0 -0
  157. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/vector_store/__init__.py +0 -0
  158. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/common/vector_store/test_qdrant_vector_store.py +0 -0
  159. {memmachine_server-0.3.7/server_tests/memmachine_server/episodic_memory → memmachine_server-0.3.9/server_tests/memmachine_server/common/vector_store/vector_search_engine}/__init__.py +0 -0
  160. {memmachine_server-0.3.7/server_tests/memmachine_server/episodic_memory/declarative_memory → memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory}/__init__.py +0 -0
  161. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/conftest.py +0 -0
  162. {memmachine_server-0.3.7/server_tests/memmachine_server/episodic_memory/long_term_memory → memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/declarative_memory}/__init__.py +0 -0
  163. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/declarative_memory/test_declarative_memory.py +0 -0
  164. {memmachine_server-0.3.7/server_tests/memmachine_server/episodic_memory/short_term_memory → memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/event_memory}/__init__.py +0 -0
  165. {memmachine_server-0.3.7/server_tests/memmachine_server/installation → memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/long_term_memory}/__init__.py +0 -0
  166. {memmachine_server-0.3.7/server_tests/memmachine_server/main → memmachine_server-0.3.9/server_tests/memmachine_server/episodic_memory/short_term_memory}/__init__.py +0 -0
  167. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/short_term_memory/test_short_term_memory.py +0 -0
  168. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/test_episodic_memory_manager.py +0 -0
  169. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/episodic_memory/test_instance_lru_cache.py +0 -0
  170. {memmachine_server-0.3.7/server_tests/memmachine_server/semantic_memory → memmachine_server-0.3.9/server_tests/memmachine_server/installation}/__init__.py +0 -0
  171. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/installation/test_memmachine_configure.py +0 -0
  172. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/installation/test_utilities.py +0 -0
  173. {memmachine_server-0.3.7/server_tests/memmachine_server/semantic_memory/config_store → memmachine_server-0.3.9/server_tests/memmachine_server/main}/__init__.py +0 -0
  174. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/main/conftest.py +0 -0
  175. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/main/test_memachine.py +0 -0
  176. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/main/test_memmachine_delete_session.py +0 -0
  177. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/main/test_memmachine_integration.py +0 -0
  178. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/retrieval_agent/__init__.py +0 -0
  179. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/retrieval_agent/test_retrieval_agent.py +0 -0
  180. {memmachine_server-0.3.7/server_tests/memmachine_server/semantic_memory/storage → memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory}/__init__.py +0 -0
  181. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/cluster_store/__init__.py +0 -0
  182. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/cluster_store/test_cluster_state_storage.py +0 -0
  183. {memmachine_server-0.3.7/server_tests/memmachine_server/semantic_memory/storage/alembic_pg → memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/config_store}/__init__.py +0 -0
  184. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/config_store/test_caching_semantic_config_storage.py +0 -0
  185. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/config_store/test_semantic_config_storage.py +0 -0
  186. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/conftest.py +0 -0
  187. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/mock_semantic_memory_objects.py +0 -0
  188. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/semantic_test_utils.py +0 -0
  189. {memmachine_server-0.3.7/server_tests/memmachine_server/server → memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/storage}/__init__.py +0 -0
  190. {memmachine_server-0.3.7/server_tests/memmachine_server/server/api_v2 → memmachine_server-0.3.9/server_tests/memmachine_server/semantic_memory/storage/alembic_pg}/__init__.py +0 -0
  191. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/helpers.py +0 -0
  192. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/original_schema.sql +0 -0
  193. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/test_set_id_migration.py +0 -0
  194. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/alembic_pg/test_sqlalchemy_vs_alembic.py +0 -0
  195. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/conftest.py +0 -0
  196. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/in_memory_semantic_storage.py +0 -0
  197. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/test_semantic_storage.py +0 -0
  198. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/storage/test_text_sanitizer.py +0 -0
  199. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_cluster_manager.py +0 -0
  200. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_cluster_splitter.py +0 -0
  201. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_history_cleanup.py +0 -0
  202. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_ingestion.py +0 -0
  203. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_llm_integration.py +0 -0
  204. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_memory.py +0 -0
  205. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_memory_background.py +0 -0
  206. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_memory_integration.py +0 -0
  207. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_model.py +0 -0
  208. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/semantic_memory/test_semantic_session_manager.py +0 -0
  209. {memmachine_server-0.3.7/server_tests/memmachine_server/server/prompt → memmachine_server-0.3.9/server_tests/memmachine_server/server}/__init__.py +0 -0
  210. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_mcp.py +0 -0
  211. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_service.py +0 -0
  212. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/api_v2/test_spec.py +0 -0
  213. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/prompt/test_prompt_utilities.py +0 -0
  214. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/server/test_middleware.py +0 -0
  215. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/server_tests/memmachine_server/test_data/longmemeval_snippet.json +0 -0
  216. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/setup.cfg +0 -0
  217. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/__init__.py +0 -0
  218. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/__init__.py +0 -0
  219. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/api/__init__.py +0 -0
  220. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/api/version.py +0 -0
  221. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/__init__.py +0 -0
  222. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/default_episode_summary_system_prompt.txt +0 -0
  223. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/default_episode_summary_user_prompt.txt +0 -0
  224. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/embedder_conf.py +0 -0
  225. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/language_model_conf.py +0 -0
  226. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/log_conf.py +0 -0
  227. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/mixin_confs.py +0 -0
  228. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/configuration/reranker_conf.py +0 -0
  229. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/data_types.py +0 -0
  230. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/embedder/__init__.py +0 -0
  231. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/embedder/amazon_bedrock_embedder.py +0 -0
  232. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/embedder/embedder.py +0 -0
  233. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/embedder/openai_embedder.py +0 -0
  234. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/embedder/sentence_transformer_embedder.py +0 -0
  235. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/episode_store/__init__.py +0 -0
  236. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/filter/__init__.py +0 -0
  237. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/filter/filter_parser.py +0 -0
  238. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/filter/sql_filter_util.py +0 -0
  239. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/language_model/__init__.py +0 -0
  240. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/language_model/amazon_bedrock_language_model.py +0 -0
  241. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/language_model/language_model.py +0 -0
  242. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/language_model/openai_chat_completions_language_model.py +0 -0
  243. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/language_model/openai_responses_language_model.py +0 -0
  244. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/metrics_factory/__init__.py +0 -0
  245. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/metrics_factory/metrics_factory.py +0 -0
  246. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/metrics_factory/operation_tracker.py +0 -0
  247. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/metrics_factory/prometheus_metrics_factory.py +0 -0
  248. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/neo4j_utils.py +0 -0
  249. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/__init__.py +0 -0
  250. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/amazon_bedrock_reranker.py +0 -0
  251. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/bm25_reranker.py +0 -0
  252. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/cohere_reranker.py +0 -0
  253. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/cross_encoder_reranker.py +0 -0
  254. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/embedder_reranker.py +0 -0
  255. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/identity_reranker.py +0 -0
  256. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/reranker.py +0 -0
  257. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/reranker/rrf_hybrid_reranker.py +0 -0
  258. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/base_manager.py +0 -0
  259. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/reranker_manager.py +0 -0
  260. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/resource_manager/semantic_manager.py +0 -0
  261. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/session_manager/__init__.py +0 -0
  262. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/session_manager/session_data_manager.py +0 -0
  263. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/session_manager/session_data_manager_sql_impl.py +0 -0
  264. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_graph_store/__init__.py +0 -0
  265. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_graph_store/data_types.py +0 -0
  266. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_graph_store/nebula_graph_vector_graph_store.py +0 -0
  267. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_graph_store/neo4j_vector_graph_store.py +0 -0
  268. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_graph_store/vector_graph_store.py +0 -0
  269. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_store/__init__.py +0 -0
  270. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_store/data_types.py +0 -0
  271. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_store/qdrant_vector_store.py +0 -0
  272. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/common/vector_store/utils.py +0 -0
  273. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/__init__.py +0 -0
  274. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/declarative_memory/__init__.py +0 -0
  275. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/declarative_memory/data_types.py +0 -0
  276. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/episodic_memory_manager.py +0 -0
  277. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/instance_lru_cache.py +0 -0
  278. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/service_locator.py +0 -0
  279. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/short_term_memory/__init__.py +0 -0
  280. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/short_term_memory/service_locator.py +0 -0
  281. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/episodic_memory/short_term_memory/short_term_memory.py +0 -0
  282. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/installation/__init__.py +0 -0
  283. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/installation/memmachine_configure.py +0 -0
  284. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/installation/utilities.py +0 -0
  285. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/main/__init__.py +0 -0
  286. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/__init__.py +0 -0
  287. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/agents/__init__.py +0 -0
  288. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/agents/coq_agent.py +0 -0
  289. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/agents/memmachine_retriever.py +0 -0
  290. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/agents/split_query_agent.py +0 -0
  291. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/agents/tool_select_agent.py +0 -0
  292. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/common/__init__.py +0 -0
  293. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/common/agent_api.py +0 -0
  294. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/retrieval_agent/service_locator.py +0 -0
  295. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/__init__.py +0 -0
  296. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_manager.py +0 -0
  297. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_splitter.py +0 -0
  298. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_store/__init__.py +0 -0
  299. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_store/cluster_store.py +0 -0
  300. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_store/cluster_store_sqlalchemy.py +0 -0
  301. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/cluster_store/in_memory_cluster_store.py +0 -0
  302. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/config_store/__init__.py +0 -0
  303. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/config_store/caching_semantic_config_storage.py +0 -0
  304. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/config_store/config_store.py +0 -0
  305. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/config_store/config_store_sqlalchemy.py +0 -0
  306. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/semantic_ingestion.py +0 -0
  307. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/semantic_memory.py +0 -0
  308. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/semantic_model.py +0 -0
  309. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/semantic_session_manager.py +0 -0
  310. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/__init__.py +0 -0
  311. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/__init__.py +0 -0
  312. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/env.py +0 -0
  313. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/script.py.mako +0 -0
  314. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/001_initial_migration.py +0 -0
  315. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/3d6aaebdc526_sync_sqlalchemy_schema.py +0 -0
  316. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/62dff1150a46_add_created_at_to_history_add.py +0 -0
  317. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/79f00a9f2409_change_history_id_to_string.py +0 -0
  318. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/843f6d216d10_rename_semantic_type_to_semantic_.py +0 -0
  319. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/__init__.py +0 -0
  320. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/adb5618bd4ee_remove_history_table.py +0 -0
  321. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/b65f7f4a9d2c_migrate_legacy_set_ids.py +0 -0
  322. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/c7a2f8e31b90_add_ingested_composite_index.py +0 -0
  323. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/alembic_pg/versions/d1a9df11343b_add_indexes.py +0 -0
  324. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/neo4j_semantic_storage.py +0 -0
  325. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/sqlalchemy_pgvector_semantic.py +0 -0
  326. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/storage_base.py +0 -0
  327. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/storage/text_sanitizer.py +0 -0
  328. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/util/__init__.py +0 -0
  329. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/semantic_memory/util/semantic_prompt_template.py +0 -0
  330. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/__init__.py +0 -0
  331. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/__init__.py +0 -0
  332. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/exceptions.py +0 -0
  333. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/mcp.py +0 -0
  334. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/api_v2/service.py +0 -0
  335. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/app.py +0 -0
  336. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/diagnostics.py +0 -0
  337. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/mcp_http.py +0 -0
  338. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/mcp_stdio.py +0 -0
  339. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/middleware.py +0 -0
  340. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/__init__.py +0 -0
  341. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/coding_style_prompt.py +0 -0
  342. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/crm_prompt.py +0 -0
  343. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/default_prompts.py +0 -0
  344. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/financial_analyst_prompt.py +0 -0
  345. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/health_assistant_prompt.py +0 -0
  346. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/profile_prompt.py +0 -0
  347. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/prompt_utilities.py +0 -0
  348. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server/server/prompt/writing_assistant_prompt.py +0 -0
  349. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server.egg-info/dependency_links.txt +0 -0
  350. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/src/memmachine_server.egg-info/entry_points.txt +0 -0
  351. {memmachine_server-0.3.7 → memmachine_server-0.3.9}/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.7
3
+ Version: 0.3.9
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
@@ -31,19 +31,25 @@ Requires-Dist: langchain-aws>=0.2.33
31
31
  Requires-Dist: neo4j>=5.28.2
32
32
  Requires-Dist: nltk>=3.9.4
33
33
  Requires-Dist: openai>=2.21.0
34
- Requires-Dist: pgvector>=0.4.1
34
+ Requires-Dist: pgvector>=0.4.2
35
35
  Requires-Dist: prometheus-client>=0.22.1
36
36
  Requires-Dist: pydantic>=2.11.7
37
37
  Requires-Dist: pyyaml>=6.0.2
38
38
  Requires-Dist: rank-bm25>=0.2.2
39
39
  Requires-Dist: regex>=2023.0.0
40
+ Requires-Dist: sqlite-vec>=0.1.9
40
41
  Requires-Dist: sqlalchemy>=2.0.43
42
+ Requires-Dist: usearch>=2.25.1
41
43
  Requires-Dist: uvicorn>=0.35.0
42
44
  Requires-Dist: greenlet>=3.2.4
43
45
  Requires-Dist: tzdata>=2024.1; sys_platform == "win32"
44
46
  Requires-Dist: psutil>=7.1.0
47
+ Requires-Dist: langchain-text-splitters>=1.1.1
48
+ Requires-Dist: babel>=2.18.0
45
49
  Provides-Extra: gpu
46
50
  Requires-Dist: sentence-transformers>=5.1.0; extra == "gpu"
51
+ Provides-Extra: hnswlib
52
+ Requires-Dist: hnswlib>=0.8.0; extra == "hnswlib"
47
53
  Provides-Extra: nebula
48
54
  Requires-Dist: nebula5-python>=5.2.1; extra == "nebula"
49
55
  Provides-Extra: qdrant
@@ -22,17 +22,21 @@ dependencies = [
22
22
  "neo4j>=5.28.2",
23
23
  "nltk>=3.9.4",
24
24
  "openai>=2.21.0",
25
- "pgvector>=0.4.1",
25
+ "pgvector>=0.4.2",
26
26
  "prometheus-client>=0.22.1",
27
27
  "pydantic>=2.11.7",
28
28
  "pyyaml>=6.0.2",
29
29
  "rank-bm25>=0.2.2",
30
30
  "regex>=2023.0.0",
31
+ "sqlite-vec>=0.1.9",
31
32
  "sqlalchemy>=2.0.43",
33
+ "usearch>=2.25.1",
32
34
  "uvicorn>=0.35.0",
33
35
  "greenlet>=3.2.4",
34
36
  "tzdata>=2024.1 ; sys_platform == 'win32'",
35
37
  "psutil>=7.1.0",
38
+ "langchain-text-splitters>=1.1.1",
39
+ "babel>=2.18.0",
36
40
  ]
37
41
  requires-python = ">= 3.12"
38
42
  authors = [
@@ -54,6 +58,9 @@ license = "Apache-2.0"
54
58
  gpu = [
55
59
  "sentence-transformers>=5.1.0",
56
60
  ]
61
+ hnswlib = [
62
+ "hnswlib>=0.8.0",
63
+ ]
57
64
  nebula = [
58
65
  "nebula5-python>=5.2.1",
59
66
  ]
@@ -10,8 +10,13 @@ from memmachine_server.common.configuration import (
10
10
  EpisodicMemoryConfPartial,
11
11
  )
12
12
  from memmachine_server.common.configuration.episodic_config import (
13
+ DeclarativeLongTermMemoryConf,
14
+ EpisodicMemoryConf,
15
+ EventLongTermMemoryConf,
13
16
  LongTermMemoryConfPartial,
17
+ PassthroughSegmenterConf,
14
18
  ShortTermMemoryConfPartial,
19
+ WholeTextDeriverConf,
15
20
  )
16
21
  from memmachine_server.common.configuration.log_conf import LogLevel
17
22
 
@@ -34,6 +39,7 @@ def test_update_long_term_memory_conf(long_term_memory_conf: LongTermMemoryConfP
34
39
  )
35
40
 
36
41
  updated = specific.merge(long_term_memory_conf)
42
+ assert isinstance(updated, DeclarativeLongTermMemoryConf)
37
43
  assert updated.session_id == "session_123"
38
44
  assert updated.embedder == "embedder_v2"
39
45
  assert updated.reranker == "reranker_v1"
@@ -219,3 +225,168 @@ def test_save_raises_error_when_no_path():
219
225
 
220
226
  with pytest.raises(ValueError, match="No path provided"):
221
227
  conf_no_path.save()
228
+
229
+
230
+ # --- Backwards-compat: long-term-memory backend discriminator ---
231
+
232
+
233
+ def _ltm_minimal_short_term_block() -> dict:
234
+ return {
235
+ "session_key": "s",
236
+ "llm_model": "m",
237
+ "summary_prompt_system": "x",
238
+ "summary_prompt_user": "y",
239
+ }
240
+
241
+
242
+ def test_old_param_data_without_backend_loads_as_declarative():
243
+ """Old persisted session param_data (no `backend`) round-trips as declarative.
244
+
245
+ Reproduces the historical session_data_manager_sql_impl.py:306 path:
246
+ `EpisodicMemoryConf(**session.param_data)` for a row written before the
247
+ backend discriminator existed.
248
+ """
249
+ old_param_data = {
250
+ "session_key": "old_session",
251
+ "long_term_memory": {
252
+ "session_id": "old_session",
253
+ "embedder": "openai_embedder",
254
+ "reranker": "my_reranker_id",
255
+ "vector_graph_store": "my_storage_id",
256
+ },
257
+ "short_term_memory": _ltm_minimal_short_term_block(),
258
+ "long_term_memory_enabled": True,
259
+ "short_term_memory_enabled": True,
260
+ "enabled": True,
261
+ }
262
+
263
+ conf = EpisodicMemoryConf.model_validate(old_param_data)
264
+ assert isinstance(conf.long_term_memory, DeclarativeLongTermMemoryConf)
265
+ assert conf.long_term_memory.backend == "declarative"
266
+ assert conf.long_term_memory.embedder == "openai_embedder"
267
+ assert conf.long_term_memory.vector_graph_store == "my_storage_id"
268
+
269
+
270
+ def test_episodic_memory_conf_with_explicit_event_backend_loads_as_event():
271
+ data = {
272
+ "session_key": "s",
273
+ "long_term_memory": {
274
+ "backend": "event",
275
+ "session_id": "s",
276
+ "vector_store": "vstore",
277
+ "segment_store": "pg_engine",
278
+ "embedder": "openai_embedder",
279
+ },
280
+ "short_term_memory": _ltm_minimal_short_term_block(),
281
+ }
282
+
283
+ conf = EpisodicMemoryConf.model_validate(data)
284
+ assert isinstance(conf.long_term_memory, EventLongTermMemoryConf)
285
+ assert conf.long_term_memory.vector_store == "vstore"
286
+ assert conf.long_term_memory.segment_store == "pg_engine"
287
+ # Default sub-configs.
288
+ assert isinstance(conf.long_term_memory.segmenter, PassthroughSegmenterConf)
289
+ assert isinstance(conf.long_term_memory.deriver, WholeTextDeriverConf)
290
+ # Reranker is optional on the event backend.
291
+ assert conf.long_term_memory.reranker is None
292
+
293
+
294
+ def test_episodic_memory_conf_with_explicit_declarative_backend_loads_as_declarative():
295
+ data = {
296
+ "session_key": "s",
297
+ "long_term_memory": {
298
+ "backend": "declarative",
299
+ "session_id": "s",
300
+ "vector_graph_store": "g",
301
+ "embedder": "e",
302
+ "reranker": "r",
303
+ },
304
+ "short_term_memory": _ltm_minimal_short_term_block(),
305
+ }
306
+
307
+ conf = EpisodicMemoryConf.model_validate(data)
308
+ assert isinstance(conf.long_term_memory, DeclarativeLongTermMemoryConf)
309
+ assert conf.long_term_memory.vector_graph_store == "g"
310
+
311
+
312
+ def test_partial_merge_with_no_backend_resolves_to_declarative():
313
+ """LongTermMemoryConfPartial.merge() defaults missing backend to declarative."""
314
+ base = LongTermMemoryConfPartial(
315
+ session_id="s",
316
+ embedder="e",
317
+ reranker="r",
318
+ vector_graph_store="g",
319
+ )
320
+ override = LongTermMemoryConfPartial(embedder="e2")
321
+
322
+ merged = override.merge(base)
323
+ assert isinstance(merged, DeclarativeLongTermMemoryConf)
324
+ assert merged.embedder == "e2"
325
+ assert merged.reranker == "r"
326
+ assert merged.vector_graph_store == "g"
327
+
328
+
329
+ def test_partial_merge_with_event_backend_resolves_to_event():
330
+ base = LongTermMemoryConfPartial(
331
+ backend="event",
332
+ session_id="s",
333
+ embedder="e",
334
+ vector_store="v",
335
+ segment_store="seg",
336
+ )
337
+ override = LongTermMemoryConfPartial()
338
+
339
+ merged = override.merge(base)
340
+ assert isinstance(merged, EventLongTermMemoryConf)
341
+ assert merged.vector_store == "v"
342
+ assert merged.segment_store == "seg"
343
+ assert merged.embedder == "e"
344
+ assert merged.reranker is None
345
+
346
+
347
+ def test_partial_merge_explicit_declarative_backend():
348
+ base = LongTermMemoryConfPartial(
349
+ backend="declarative",
350
+ session_id="s",
351
+ embedder="e",
352
+ reranker="r",
353
+ vector_graph_store="g",
354
+ )
355
+ merged = LongTermMemoryConfPartial().merge(base)
356
+ assert isinstance(merged, DeclarativeLongTermMemoryConf)
357
+
358
+
359
+ def test_partial_merge_primary_backend_wins_over_fallback():
360
+ """Primary backend takes precedence over fallback."""
361
+ primary = LongTermMemoryConfPartial(
362
+ backend="event",
363
+ session_id="s",
364
+ embedder="e",
365
+ vector_store="v",
366
+ segment_store="seg",
367
+ )
368
+ fallback = LongTermMemoryConfPartial(
369
+ backend="declarative",
370
+ session_id="s",
371
+ embedder="e",
372
+ reranker="r",
373
+ vector_graph_store="g",
374
+ )
375
+ merged = primary.merge(fallback)
376
+ assert isinstance(merged, EventLongTermMemoryConf)
377
+
378
+
379
+ def test_existing_sample_yaml_loads_as_declarative_via_full_configuration():
380
+ """Existing sample YAMLs (no `backend` field) load through Configuration."""
381
+ config_path = find_config_file("episodic_memory_config.cpu.sample")
382
+ conf = Configuration.load_yml_file(str(config_path))
383
+ assert conf.episodic_memory.long_term_memory is not None
384
+ # Configuration.episodic_memory is the partial; backend stays None on load.
385
+ assert conf.episodic_memory.long_term_memory.backend is None
386
+ # ...and merging the LTM partial alone resolves to declarative.
387
+ ltm_merged = LongTermMemoryConfPartial(session_id="test_session").merge(
388
+ conf.episodic_memory.long_term_memory
389
+ )
390
+ assert isinstance(ltm_merged, DeclarativeLongTermMemoryConf)
391
+ assert ltm_merged.embedder == "openai_embedder"
392
+ assert ltm_merged.vector_graph_store == "my_storage_id"
@@ -7,6 +7,9 @@ from memmachine_server.common.configuration.database_conf import (
7
7
  Neo4jConf,
8
8
  QdrantConf,
9
9
  SqlAlchemyConf,
10
+ SQLiteVectorStoreConf,
11
+ SQLiteVectorStoreEngine,
12
+ SQLiteVecVectorStoreConf,
10
13
  SupportedDB,
11
14
  )
12
15
 
@@ -16,6 +19,14 @@ def test_parse_supported_db_enums():
16
19
  assert SupportedDB.from_provider("postgres") == SupportedDB.POSTGRES
17
20
  assert SupportedDB.from_provider("sqlite") == SupportedDB.SQLITE
18
21
  assert SupportedDB.from_provider("qdrant") == SupportedDB.QDRANT
22
+ assert (
23
+ SupportedDB.from_provider("sqlite_vector_store")
24
+ == SupportedDB.SQLITE_VECTOR_STORE
25
+ )
26
+ assert (
27
+ SupportedDB.from_provider("sqlite_vec_vector_store")
28
+ == SupportedDB.SQLITE_VEC_VECTOR_STORE
29
+ )
19
30
 
20
31
  neo4j_db = SupportedDB.NEO4J
21
32
  assert neo4j_db.conf_cls == Neo4jConf
@@ -35,6 +46,16 @@ def test_parse_supported_db_enums():
35
46
  assert qdrant_db.dialect is None
36
47
  assert qdrant_db.driver is None
37
48
 
49
+ sqlite_vs_db = SupportedDB.SQLITE_VECTOR_STORE
50
+ assert sqlite_vs_db.conf_cls == SQLiteVectorStoreConf
51
+ assert sqlite_vs_db.dialect is None
52
+ assert sqlite_vs_db.driver is None
53
+
54
+ sqlite_vec_vs_db = SupportedDB.SQLITE_VEC_VECTOR_STORE
55
+ assert sqlite_vec_vs_db.conf_cls == SQLiteVecVectorStoreConf
56
+ assert sqlite_vec_vs_db.dialect is None
57
+ assert sqlite_vec_vs_db.driver is None
58
+
38
59
 
39
60
  def test_sqlite_without_path_raises():
40
61
  message = "non-empty 'path'"
@@ -96,6 +117,21 @@ def db_conf_dict() -> dict:
96
117
  "registry_replication_factor": 3,
97
118
  },
98
119
  },
120
+ "my_sqlite_vs": {
121
+ "provider": "sqlite_vector_store",
122
+ "config": {
123
+ "path": "vs.db",
124
+ "vector_search_engine": "hnswlib",
125
+ "index_directory": "/tmp/vs_indexes",
126
+ "save_threshold": 500,
127
+ },
128
+ },
129
+ "my_sqlite_vec_vs": {
130
+ "provider": "sqlite_vec_vector_store",
131
+ "config": {
132
+ "path": "vec_vs.db",
133
+ },
134
+ },
99
135
  },
100
136
  }
101
137
 
@@ -149,6 +185,19 @@ def test_parse_valid_storage_dict(db_conf_dict):
149
185
  assert qdrant_conf.is_distributed is True
150
186
  assert qdrant_conf.registry_replication_factor == 3
151
187
 
188
+ # SQLiteVectorStore (hnswlib engine)
189
+ sqlite_vs_conf = storage_conf.sqlite_vector_store_confs["my_sqlite_vs"]
190
+ assert isinstance(sqlite_vs_conf, SQLiteVectorStoreConf)
191
+ assert sqlite_vs_conf.path == "vs.db"
192
+ assert sqlite_vs_conf.vector_search_engine == SQLiteVectorStoreEngine.HNSWLIB
193
+ assert sqlite_vs_conf.index_directory == "/tmp/vs_indexes"
194
+ assert sqlite_vs_conf.save_threshold == 500
195
+
196
+ # SQLiteVecVectorStore
197
+ sqlite_vec_vs_conf = storage_conf.sqlite_vec_vector_store_confs["my_sqlite_vec_vs"]
198
+ assert isinstance(sqlite_vec_vs_conf, SQLiteVecVectorStoreConf)
199
+ assert sqlite_vec_vs_conf.path == "vec_vs.db"
200
+
152
201
 
153
202
  def test_read_db_password_from_env(monkeypatch, db_conf_dict):
154
203
  monkeypatch.setenv("MY_DB_PASSWORD", "env-db-password")
@@ -174,7 +223,10 @@ def test_parse_unknown_provider_raises():
174
223
  input_dict = {
175
224
  "databases": {"bad_storage": {"provider": "unknown_db", "host": "localhost"}},
176
225
  }
177
- message = "Supported providers are: neo4j, postgres, sqlite, nebula_graph, qdrant"
226
+ message = (
227
+ "Supported providers are: neo4j, postgres, sqlite, nebula_graph, qdrant, "
228
+ "sqlite_vector_store, sqlite_vec_vector_store"
229
+ )
178
230
  with pytest.raises(ValueError, match=message):
179
231
  DatabasesConf.parse(input_dict)
180
232
 
@@ -184,6 +236,10 @@ def test_parse_empty_storage_returns_empty_conf():
184
236
  storage_conf = DatabasesConf.parse(input_dict)
185
237
  assert storage_conf.neo4j_confs == {}
186
238
  assert storage_conf.relational_db_confs == {}
239
+ assert storage_conf.nebula_graph_confs == {}
240
+ assert storage_conf.qdrant_confs == {}
241
+ assert storage_conf.sqlite_vector_store_confs == {}
242
+ assert storage_conf.sqlite_vec_vector_store_confs == {}
187
243
 
188
244
 
189
245
  def test_serialize_deserialize_database_conf(db_conf_dict):
@@ -267,3 +323,46 @@ def test_qdrant_build_config():
267
323
  assert config.host == "qdrant.local"
268
324
  assert config.port == 9333
269
325
  assert config.is_distributed is True
326
+
327
+
328
+ def test_sqlite_vector_store_conf_defaults():
329
+ conf = SQLiteVectorStoreConf(path="local.db")
330
+ assert conf.path == "local.db"
331
+ # USearch is the default search engine provider.
332
+ assert conf.vector_search_engine == SQLiteVectorStoreEngine.USEARCH
333
+ # Index persistence is opt-in.
334
+ assert conf.index_directory is None
335
+ assert conf.save_threshold == 1000
336
+
337
+
338
+ def test_sqlite_vector_store_conf_does_not_expose_engine_tuning_knobs():
339
+ """Per-engine tuning knobs (M, ef_*) must not leak into configuration."""
340
+ fields = SQLiteVectorStoreConf.model_fields
341
+ assert "m" not in fields
342
+ assert "ef_construction" not in fields
343
+ assert "ef_search" not in fields
344
+
345
+
346
+ def test_sqlite_vector_store_conf_requires_path():
347
+ with pytest.raises(ValueError, match="non-empty 'path'"):
348
+ SQLiteVectorStoreConf(path="")
349
+
350
+
351
+ def test_sqlite_vec_vector_store_conf_requires_path():
352
+ with pytest.raises(ValueError, match="non-empty 'path'"):
353
+ SQLiteVecVectorStoreConf(path="")
354
+
355
+
356
+ def test_sqlite_vector_store_build_config():
357
+ config = SupportedDB.SQLITE_VECTOR_STORE.build_config(
358
+ {"path": "vs.db", "vector_search_engine": "hnswlib"}
359
+ )
360
+ assert isinstance(config, SQLiteVectorStoreConf)
361
+ assert config.path == "vs.db"
362
+ assert config.vector_search_engine == SQLiteVectorStoreEngine.HNSWLIB
363
+
364
+
365
+ def test_sqlite_vec_vector_store_build_config():
366
+ config = SupportedDB.SQLITE_VEC_VECTOR_STORE.build_config({"path": "vec.db"})
367
+ assert isinstance(config, SQLiteVecVectorStoreConf)
368
+ assert config.path == "vec.db"
@@ -1,5 +1,6 @@
1
1
  """Test for the Episode models."""
2
2
 
3
+ import json
3
4
  from datetime import UTC, datetime
4
5
 
5
6
  import pytest
@@ -60,3 +61,51 @@ def test_episodes_to_string_with_episode_response(base_episode_data):
60
61
  assert len(lines) == 1
61
62
  line0 = '[Wednesday, January 14, 2026 at 01:30 PM] user_1: "Hello world"'
62
63
  assert lines[0] == line0
64
+
65
+
66
+ def test_episodes_to_string_message_preserves_non_ascii(base_episode_data):
67
+ """Non-ASCII content must appear literally in the LLM context, not as
68
+ ``\\uXXXX`` escapes — escapes inflate the prompt token count and
69
+ obscure semantic content."""
70
+ base_episode_data["content"] = "寿司 café 🍕 Привет"
71
+ ep = Episode(**base_episode_data)
72
+ result = episodes_to_string([ep])
73
+
74
+ assert "寿司" in result
75
+ assert "café" in result
76
+ assert "🍕" in result
77
+ assert "Привет" in result
78
+ assert "\\u" not in result
79
+
80
+ # The JSON-quoted content must round-trip back to the original string.
81
+ line = result.rstrip("\n")
82
+ json_part = line.split(": ", 1)[1]
83
+ assert json.loads(json_part) == "寿司 café 🍕 Привет"
84
+
85
+
86
+ def test_episodes_to_string_non_message_preserves_non_ascii(base_episode_data):
87
+ """The ``case _:`` fallback (e.g. an EpisodeResponse with no episode
88
+ type) must also preserve Unicode literally."""
89
+ fallback_data = {k: v for k, v in base_episode_data.items() if k != "session_key"}
90
+ fallback_data["episode_type"] = None
91
+ fallback_data["content"] = "要約: ☕ résumé"
92
+ er = EpisodeResponse(**fallback_data)
93
+ result = episodes_to_string([er])
94
+
95
+ assert "要約" in result
96
+ assert "☕" in result
97
+ assert "résumé" in result
98
+ assert "\\u" not in result
99
+ assert json.loads(result.rstrip("\n")) == "要約: ☕ résumé"
100
+
101
+
102
+ def test_episodes_to_string_output_is_utf8_encodable(base_episode_data):
103
+ """The formatted string is the exact text fed to LanguageModel prompts;
104
+ it must be losslessly UTF-8 encodable (no surrogate pairs from broken
105
+ escaping)."""
106
+ base_episode_data["content"] = "ASCII + 中文 + 🚀 + emoji modifier 👨‍👩‍👧‍👦"
107
+ ep = Episode(**base_episode_data)
108
+ result = episodes_to_string([ep])
109
+
110
+ encoded = result.encode("utf-8")
111
+ assert encoded.decode("utf-8") == result
@@ -105,6 +105,26 @@ async def test_add_and_get_history(episode_storage: EpisodeStorage):
105
105
  assert history.episode_type == EpisodeType.MESSAGE
106
106
 
107
107
 
108
+ @pytest.mark.asyncio
109
+ async def test_get_episodes_batch(episode_storage: EpisodeStorage):
110
+ first = await create_history_entry(episode_storage, content="first")
111
+ second = await create_history_entry(episode_storage, content="second")
112
+ third = await create_history_entry(episode_storage, content="third")
113
+
114
+ try:
115
+ # All present; duplicates are deduped; missing IDs are absent.
116
+ fetched = await episode_storage.get_episodes([first, third, first, "999999999"])
117
+ by_uid = {ep.uid: ep for ep in fetched}
118
+ assert set(by_uid.keys()) == {first, third}
119
+ assert by_uid[first].content == "first"
120
+ assert by_uid[third].content == "third"
121
+
122
+ # Empty input returns empty list without hitting the DB.
123
+ assert await episode_storage.get_episodes([]) == []
124
+ finally:
125
+ await episode_storage.delete_episodes([first, second, third])
126
+
127
+
108
128
  @pytest.mark.asyncio
109
129
  async def test_add_multiple_episodes_returns_models(
110
130
  episode_storage: EpisodeStorage,
@@ -0,0 +1 @@
1
+ """Tests for payload codecs."""
@@ -0,0 +1,16 @@
1
+ """Tests for payload codecs."""
2
+
3
+ from memmachine_server.common.payload_codec.plaintext_payload_codec import (
4
+ PlaintextPayloadCodec,
5
+ )
6
+
7
+
8
+ def test_plaintext_payload_codec_round_trip() -> None:
9
+ codec = PlaintextPayloadCodec()
10
+ value = b'{"type":"message","source":"User"}'
11
+
12
+ encoded = codec.encode(value)
13
+ decoded = codec.decode(encoded)
14
+
15
+ assert encoded == value
16
+ assert decoded == value
@@ -0,0 +1,18 @@
1
+ """Tests for payload codec configuration."""
2
+
3
+ from memmachine_server.common.payload_codec import (
4
+ decode_payload_codec_config,
5
+ encode_payload_codec_config,
6
+ )
7
+ from memmachine_server.common.payload_codec.payload_codec_config import (
8
+ PlaintextPayloadCodecConfig,
9
+ )
10
+
11
+
12
+ def test_plaintext_payload_codec_config_round_trip() -> None:
13
+ config = PlaintextPayloadCodecConfig()
14
+
15
+ serialized = encode_payload_codec_config(config)
16
+ deserialized = decode_payload_codec_config(serialized)
17
+
18
+ assert deserialized == config