hy-memory 2.0.5.dev1__tar.gz → 2.0.5.dev2__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 (141) hide show
  1. {hy_memory-2.0.5.dev1/hy_memory.egg-info → hy_memory-2.0.5.dev2}/PKG-INFO +1 -1
  2. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/client.py +194 -0
  3. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2/hy_memory.egg-info}/PKG-INFO +1 -1
  4. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/pyproject.toml +1 -1
  5. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/LICENSE +0 -0
  6. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/MANIFEST.in +0 -0
  7. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/README.md +0 -0
  8. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/__init__.py +0 -0
  9. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/__init__.py +0 -0
  10. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/abstractor.py +0 -0
  11. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/emotion_analyzer.py +0 -0
  12. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/episode_summary.py +0 -0
  13. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/extractor.py +0 -0
  14. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/intention_detector.py +0 -0
  15. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/llm_provider.py +0 -0
  16. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/mem_agent.py +0 -0
  17. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/prompts_zh.py +0 -0
  18. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/reconciler.py +0 -0
  19. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/reflector.py +0 -0
  20. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/tools/__init__.py +0 -0
  21. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/tools/base.py +0 -0
  22. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/agent/tools/basic_profile.py +0 -0
  23. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/__init__.py +0 -0
  24. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/chain_store.py +0 -0
  25. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/extractor.py +0 -0
  26. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/fact_reconciler.py +0 -0
  27. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/judge.py +0 -0
  28. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/lexical.py +0 -0
  29. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/preproc.py +0 -0
  30. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/prompts_zh.py +0 -0
  31. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/reconciler.py +0 -0
  32. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/store.py +0 -0
  33. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/types.py +0 -0
  34. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/coding/writer.py +0 -0
  35. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/config.py +0 -0
  36. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/core/__init__.py +0 -0
  37. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/core/embed_service.py +0 -0
  38. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/core/merger.py +0 -0
  39. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/core/scorer.py +0 -0
  40. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/core/workload.py +0 -0
  41. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/__init__.py +0 -0
  42. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/cache.py +0 -0
  43. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/cache_base.py +0 -0
  44. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/cache_mysql.py +0 -0
  45. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/cache_sqlite.py +0 -0
  46. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/graph_store.py +0 -0
  47. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/graph_store_base.py +0 -0
  48. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/graph_store_kuzu.py +0 -0
  49. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/graph_store_neo4j.py +0 -0
  50. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/history_store.py +0 -0
  51. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/kv_store.py +0 -0
  52. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/rdb.py +0 -0
  53. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/vector_store.py +0 -0
  54. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/vector_store_base.py +0 -0
  55. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/vector_store_chroma.py +0 -0
  56. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/vector_store_faiss.py +0 -0
  57. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/data/vector_store_qdrant.py +0 -0
  58. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/inspector.py +0 -0
  59. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/metrics.py +0 -0
  60. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/models/__init__.py +0 -0
  61. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/models/memory.py +0 -0
  62. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/models/requests.py +0 -0
  63. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/__init__.py +0 -0
  64. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_graph/__init__.py +0 -0
  65. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_graph/projector.py +0 -0
  66. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_graph/rerank.py +0 -0
  67. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_graph/topic_summary.py +0 -0
  68. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/__init__.py +0 -0
  69. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/bm25.py +0 -0
  70. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/bm25_fastembed.py +0 -0
  71. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/candidate_guards.py +0 -0
  72. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/config.py +0 -0
  73. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/date_view.py +0 -0
  74. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/dedup.py +0 -0
  75. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/diversity.py +0 -0
  76. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/entities.py +0 -0
  77. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/entity_store.py +0 -0
  78. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/evolution.py +0 -0
  79. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/hierarchy_bundle.py +0 -0
  80. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/intent.py +0 -0
  81. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/intention.py +0 -0
  82. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/lemmatize.py +0 -0
  83. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/local_rerank.py +0 -0
  84. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/memory_format.py +0 -0
  85. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/multi_seed_bundle.py +0 -0
  86. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/ner.py +0 -0
  87. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/profile_evidence.py +0 -0
  88. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/profile_owner_gate.py +0 -0
  89. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/query_expand.py +0 -0
  90. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/reconcile_retrieval.py +0 -0
  91. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/record_date_view.py +0 -0
  92. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/retrieval_clauses.py +0 -0
  93. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/rrf.py +0 -0
  94. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/scoring.py +0 -0
  95. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/series_tail_guard.py +0 -0
  96. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/session_episode.py +0 -0
  97. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/strength.py +0 -0
  98. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/supplemental_propositions.py +0 -0
  99. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/tag_index.py +0 -0
  100. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/temporal.py +0 -0
  101. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/topic_candidates.py +0 -0
  102. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/trace.py +0 -0
  103. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/underflow.py +0 -0
  104. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/_retrieval/user_level_l0.py +0 -0
  105. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/balanced_catalog.py +0 -0
  106. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/base.py +0 -0
  107. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/cross_domain_sweeper.py +0 -0
  108. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/reader.py +0 -0
  109. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/reader_base.py +0 -0
  110. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/reader_hybrid.py +0 -0
  111. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/reader_legacy.py +0 -0
  112. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/registry.py +0 -0
  113. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/specific_supplement.py +0 -0
  114. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/system2_agent.py +0 -0
  115. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/system2_tools.py +0 -0
  116. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/system2_writer.py +0 -0
  117. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/user_profile_scope.py +0 -0
  118. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/pipelines/writer.py +0 -0
  119. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/runtime.py +0 -0
  120. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/server.py +0 -0
  121. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/snapshot.py +0 -0
  122. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/structure.py +0 -0
  123. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/async_executor.py +0 -0
  124. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/clone_references.py +0 -0
  125. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/keyword_ties.py +0 -0
  126. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/lang_detect.py +0 -0
  127. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/log_setup.py +0 -0
  128. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/metrics.py +0 -0
  129. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/model_call_context.py +0 -0
  130. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/pipeline_log_writer.py +0 -0
  131. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/pipeline_observability.py +0 -0
  132. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/source_filter.py +0 -0
  133. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/time_window.py +0 -0
  134. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/token_count.py +0 -0
  135. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/trace_file_writer.py +0 -0
  136. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory/utils/tracer.py +0 -0
  137. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory.egg-info/SOURCES.txt +0 -0
  138. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory.egg-info/dependency_links.txt +0 -0
  139. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory.egg-info/requires.txt +0 -0
  140. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/hy_memory.egg-info/top_level.txt +0 -0
  141. {hy_memory-2.0.5.dev1 → hy_memory-2.0.5.dev2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hy-memory
3
- Version: 2.0.5.dev1
3
+ Version: 2.0.5.dev2
4
4
  Summary: HY Memory - Industrial-grade dual-system cognitive memory framework
5
5
  Author: alvinfei
6
6
  License-Expression: Apache-2.0
@@ -2936,6 +2936,49 @@ class HyMemoryClient:
2936
2936
  include_runtime_diag=True,
2937
2937
  )
2938
2938
 
2939
+ def import_memory_exact(
2940
+ self,
2941
+ content: str,
2942
+ *,
2943
+ memory_id: str,
2944
+ user_id: str,
2945
+ agent_id: str = "default_agent",
2946
+ session_id: str = "default_session",
2947
+ source: str = "default",
2948
+ layer: Any = "l2_fact",
2949
+ status: Any = "active",
2950
+ owner: Optional[str] = None,
2951
+ tags: Optional[List[str]] = None,
2952
+ supersedes: Optional[List[str]] = None,
2953
+ superseded_by: Optional[List[str]] = None,
2954
+ is_latest: bool = True,
2955
+ memory_at: Optional[datetime] = None,
2956
+ metadata: Optional[Dict[str, Any]] = None,
2957
+ request_id: Optional[str] = None,
2958
+ ) -> Dict[str, Any]:
2959
+ """Import one existing semantic memory without extraction/reconcile."""
2960
+ return self._loop_thread.run(
2961
+ self.async_import_memory_exact(
2962
+ content,
2963
+ memory_id=memory_id,
2964
+ user_id=user_id,
2965
+ agent_id=agent_id,
2966
+ session_id=session_id,
2967
+ source=source,
2968
+ layer=layer,
2969
+ status=status,
2970
+ owner=owner,
2971
+ tags=tags,
2972
+ supersedes=supersedes,
2973
+ superseded_by=superseded_by,
2974
+ is_latest=is_latest,
2975
+ memory_at=memory_at,
2976
+ metadata=metadata,
2977
+ request_id=request_id,
2978
+ ),
2979
+ include_runtime_diag=True,
2980
+ )
2981
+
2939
2982
  def get_raw(self, raw_id: str) -> Optional[Dict[str, Any]]:
2940
2983
  """Read one SDK raw record through the explicit raw API."""
2941
2984
  return self._loop_thread.run(self.async_get_raw(raw_id))
@@ -3223,6 +3266,157 @@ class HyMemoryClient:
3223
3266
  raise RuntimeError("raw import changed the requested identity")
3224
3267
  return {"success": True, "raw_id": node_id, "request_id": request_id}
3225
3268
 
3269
+ @_ensure_internal_loop
3270
+ async def async_import_memory_exact(
3271
+ self,
3272
+ content: str,
3273
+ *,
3274
+ memory_id: str,
3275
+ user_id: str,
3276
+ agent_id: str = "default_agent",
3277
+ session_id: str = "default_session",
3278
+ source: str = "default",
3279
+ layer: Any = "l2_fact",
3280
+ status: Any = "active",
3281
+ owner: Optional[str] = None,
3282
+ tags: Optional[List[str]] = None,
3283
+ supersedes: Optional[List[str]] = None,
3284
+ superseded_by: Optional[List[str]] = None,
3285
+ is_latest: bool = True,
3286
+ memory_at: Optional[datetime] = None,
3287
+ metadata: Optional[Dict[str, Any]] = None,
3288
+ request_id: Optional[str] = None,
3289
+ ) -> Dict[str, Any]:
3290
+ """Import a canonical memory node exactly, with no model invocation."""
3291
+ from .models.memory import MemoryLayer, MemoryStatus
3292
+ from .utils.source_filter import normalize_source
3293
+
3294
+ if not content or not memory_id or not user_id:
3295
+ raise ValueError("content, memory_id and user_id are required")
3296
+ normalized_layer = (
3297
+ layer if isinstance(layer, MemoryLayer) else MemoryLayer.from_string(str(layer))
3298
+ )
3299
+ if normalized_layer == MemoryLayer.L1_RAW:
3300
+ raise ValueError("use import_raw for L1_RAW")
3301
+ normalized_status = (
3302
+ status if isinstance(status, MemoryStatus) else MemoryStatus(str(status).lower())
3303
+ )
3304
+ request_id = request_id or str(uuid.uuid4())
3305
+ replay = await self._claim_write_outcome(
3306
+ request_id=request_id,
3307
+ user_id=user_id,
3308
+ agent_id=agent_id,
3309
+ session_id=session_id,
3310
+ operation="import_memory_exact",
3311
+ )
3312
+ if replay is not None:
3313
+ return replay
3314
+ try:
3315
+ result = await self._async_import_memory_exact_impl(
3316
+ content,
3317
+ memory_id=memory_id,
3318
+ user_id=user_id,
3319
+ agent_id=agent_id,
3320
+ session_id=session_id,
3321
+ source=normalize_source(source),
3322
+ layer=normalized_layer,
3323
+ status=normalized_status,
3324
+ owner=owner,
3325
+ tags=tags or [],
3326
+ supersedes=supersedes or [],
3327
+ superseded_by=superseded_by or [],
3328
+ is_latest=is_latest,
3329
+ memory_at=memory_at,
3330
+ metadata=metadata,
3331
+ request_id=request_id,
3332
+ )
3333
+ except BaseException:
3334
+ await self._mark_write_outcome_unknown(request_id)
3335
+ raise
3336
+ await self._finish_write_outcome(request_id, "succeeded", result)
3337
+ return result
3338
+
3339
+ async def _async_import_memory_exact_impl(
3340
+ self,
3341
+ content: str,
3342
+ *,
3343
+ memory_id: str,
3344
+ user_id: str,
3345
+ agent_id: str,
3346
+ session_id: str,
3347
+ source: str,
3348
+ layer,
3349
+ status,
3350
+ owner: Optional[str],
3351
+ tags: List[str],
3352
+ supersedes: List[str],
3353
+ superseded_by: List[str],
3354
+ is_latest: bool,
3355
+ memory_at: Optional[datetime],
3356
+ metadata: Optional[Dict[str, Any]],
3357
+ request_id: str,
3358
+ ) -> Dict[str, Any]:
3359
+ from .models.memory import MemoryNode, SourceType
3360
+
3361
+ existing = await self._vector_store.get_by_id(memory_id)
3362
+ if existing is not None:
3363
+ identity = (
3364
+ existing.content == content,
3365
+ existing.user_id == user_id,
3366
+ existing.agent_id == agent_id,
3367
+ existing.session_id == session_id,
3368
+ existing.source == source,
3369
+ existing.layer == layer,
3370
+ existing.status == status,
3371
+ existing.owner == owner,
3372
+ list(existing.tags or []) == tags,
3373
+ list(existing.supersedes or []) == supersedes,
3374
+ list(existing.superseded_by or []) == superseded_by,
3375
+ existing.is_latest == is_latest,
3376
+ )
3377
+ if not all(identity):
3378
+ raise ValueError("memory_id is already bound to different memory content")
3379
+ return {
3380
+ "success": True,
3381
+ "memory_id": memory_id,
3382
+ "memory_ids": [memory_id],
3383
+ "request_id": request_id,
3384
+ "replayed": True,
3385
+ }
3386
+
3387
+ custom = dict(metadata or {})
3388
+ custom["request_id"] = request_id
3389
+ custom["input_kind"] = "memory_exact_import"
3390
+ embedding = await self._embed_service.embed(content)
3391
+ node = MemoryNode(
3392
+ node_id=memory_id,
3393
+ user_id=user_id,
3394
+ agent_id=agent_id,
3395
+ session_id=session_id,
3396
+ source=source,
3397
+ layer=layer,
3398
+ content=content,
3399
+ source_type=SourceType.EXPLICIT,
3400
+ status=status,
3401
+ owner=owner,
3402
+ tags=list(tags),
3403
+ supersedes=list(supersedes),
3404
+ superseded_by=list(superseded_by),
3405
+ is_latest=is_latest,
3406
+ embedding=embedding,
3407
+ memory_at=memory_at,
3408
+ custom=custom,
3409
+ )
3410
+ stored_id = await self._vector_store.upsert(node)
3411
+ if stored_id != memory_id:
3412
+ raise RuntimeError("exact memory import changed the requested identity")
3413
+ return {
3414
+ "success": True,
3415
+ "memory_id": memory_id,
3416
+ "memory_ids": [memory_id],
3417
+ "request_id": request_id,
3418
+ }
3419
+
3226
3420
  @_ensure_internal_loop
3227
3421
  async def async_get_raw(self, raw_id: str) -> Optional[Dict[str, Any]]:
3228
3422
  from .models.memory import MemoryLayer
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hy-memory
3
- Version: 2.0.5.dev1
3
+ Version: 2.0.5.dev2
4
4
  Summary: HY Memory - Industrial-grade dual-system cognitive memory framework
5
5
  Author: alvinfei
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hy-memory"
7
- version = "2.0.5.dev1"
7
+ version = "2.0.5.dev2"
8
8
  description = "HY Memory - Industrial-grade dual-system cognitive memory framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes
File without changes