MemoryOS 2.0.27__tar.gz → 2.0.30__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 (388) hide show
  1. {memoryos-2.0.27 → memoryos-2.0.30}/PKG-INFO +2 -2
  2. {memoryos-2.0.27 → memoryos-2.0.30}/pyproject.toml +2 -2
  3. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/__init__.py +1 -1
  4. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/config.py +1 -0
  5. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/base.py +25 -9
  6. memoryos-2.0.30/src/memos/chunkers/simple_chunker.py +113 -0
  7. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/llm.py +11 -0
  8. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/cache.py +16 -4
  9. memoryos-2.0.30/src/memos/embedders/universal_api.py +148 -0
  10. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/openai.py +53 -37
  11. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/vllm.py +10 -6
  12. memoryos-2.0.27/src/memos/chunkers/simple_chunker.py +0 -53
  13. memoryos-2.0.27/src/memos/embedders/universal_api.py +0 -112
  14. {memoryos-2.0.27 → memoryos-2.0.30}/LICENSE +0 -0
  15. {memoryos-2.0.27 → memoryos-2.0.30}/README.md +0 -0
  16. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/__init__.py +0 -0
  17. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/client.py +0 -0
  18. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/context/dependencies.py +0 -0
  19. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/exceptions.py +0 -0
  20. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/__init__.py +0 -0
  21. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/add_handler.py +0 -0
  22. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/base_handler.py +0 -0
  23. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/chat_handler.py +0 -0
  24. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/component_init.py +0 -0
  25. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/config_builders.py +0 -0
  26. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/cube_handler.py +0 -0
  27. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/feedback_handler.py +0 -0
  28. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/formatters_handler.py +0 -0
  29. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/memory_handler.py +0 -0
  30. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/scheduler_handler.py +0 -0
  31. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/search_handler.py +0 -0
  32. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/handlers/suggestion_handler.py +0 -0
  33. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/lifecycle.py +0 -0
  34. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/mcp_serve.py +0 -0
  35. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/middleware/__init__.py +0 -0
  36. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/middleware/auth.py +0 -0
  37. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/middleware/rate_limit.py +0 -0
  38. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/middleware/request_context.py +0 -0
  39. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/product_models.py +0 -0
  40. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/routers/__init__.py +0 -0
  41. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/routers/admin_router.py +0 -0
  42. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/routers/server_router.py +0 -0
  43. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/server_api.py +0 -0
  44. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/server_api_ext.py +0 -0
  45. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/utils/__init__.py +0 -0
  46. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/api/utils/api_keys.py +0 -0
  47. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/__init__.py +0 -0
  48. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/charactertext_chunker.py +0 -0
  49. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/factory.py +0 -0
  50. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/markdown_chunker.py +0 -0
  51. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/chunkers/sentence_chunker.py +0 -0
  52. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/cli.py +0 -0
  53. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/__init__.py +0 -0
  54. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/base.py +0 -0
  55. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/chunker.py +0 -0
  56. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/embedder.py +0 -0
  57. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/graph_db.py +0 -0
  58. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/internet_retriever.py +0 -0
  59. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_agent.py +0 -0
  60. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_chat.py +0 -0
  61. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_cube.py +0 -0
  62. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_os.py +0 -0
  63. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_reader.py +0 -0
  64. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_scheduler.py +0 -0
  65. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/mem_user.py +0 -0
  66. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/memory.py +0 -0
  67. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/parser.py +0 -0
  68. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/reranker.py +0 -0
  69. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/utils.py +0 -0
  70. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/configs/vec_db.py +0 -0
  71. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/context/context.py +0 -0
  72. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dependency.py +0 -0
  73. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/deprecation.py +0 -0
  74. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/README.md +0 -0
  75. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/__init__.py +0 -0
  76. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/contextualization.py +0 -0
  77. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/enrichment.py +0 -0
  78. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/hook_defs.py +0 -0
  79. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/hooks.py +0 -0
  80. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/maintenance.py +0 -0
  81. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/__init__.py +0 -0
  82. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/base.py +0 -0
  83. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/diary.py +0 -0
  84. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/motive.py +0 -0
  85. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/persistence.py +0 -0
  86. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/reasoning.py +0 -0
  87. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/pipeline/recall.py +0 -0
  88. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/plugin.py +0 -0
  89. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/prompts/__init__.py +0 -0
  90. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
  91. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
  92. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/prompts/motive_prompt.py +0 -0
  93. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
  94. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/routers/__init__.py +0 -0
  95. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/routers/diary_router.py +0 -0
  96. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/routers/trigger_router.py +0 -0
  97. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/routes.py +0 -0
  98. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/search.py +0 -0
  99. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/signal_store.py +0 -0
  100. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/dream/types.py +0 -0
  101. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/__init__.py +0 -0
  102. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/ark.py +0 -0
  103. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/base.py +0 -0
  104. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/factory.py +0 -0
  105. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/ollama.py +0 -0
  106. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/embedders/sentence_transformer.py +0 -0
  107. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/exceptions.py +0 -0
  108. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/extras/__init__.py +0 -0
  109. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/__init__.py +0 -0
  110. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/base.py +0 -0
  111. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/factory.py +0 -0
  112. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/item.py +0 -0
  113. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/neo4j.py +0 -0
  114. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/neo4j_community.py +0 -0
  115. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/polardb.py +0 -0
  116. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/graph_dbs/postgres.py +0 -0
  117. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/hello_world.py +0 -0
  118. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/__init__.py +0 -0
  119. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/base.py +0 -0
  120. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/deepseek.py +0 -0
  121. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/factory.py +0 -0
  122. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/hf.py +0 -0
  123. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/hf_singleton.py +0 -0
  124. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/minimax.py +0 -0
  125. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/ollama.py +0 -0
  126. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/openai_new.py +0 -0
  127. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/qwen.py +0 -0
  128. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/llms/utils.py +0 -0
  129. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/log.py +0 -0
  130. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_agent/base.py +0 -0
  131. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_agent/deepsearch_agent.py +0 -0
  132. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_agent/factory.py +0 -0
  133. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_chat/__init__.py +0 -0
  134. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_chat/base.py +0 -0
  135. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_chat/factory.py +0 -0
  136. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_chat/simple.py +0 -0
  137. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_cube/__init__.py +0 -0
  138. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_cube/base.py +0 -0
  139. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_cube/general.py +0 -0
  140. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_cube/navie.py +0 -0
  141. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_cube/utils.py +0 -0
  142. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_feedback/base.py +0 -0
  143. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_feedback/feedback.py +0 -0
  144. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_feedback/simple_feedback.py +0 -0
  145. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_feedback/utils.py +0 -0
  146. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_os/core.py +0 -0
  147. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_os/main.py +0 -0
  148. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_os/utils/default_config.py +0 -0
  149. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_os/utils/format_utils.py +0 -0
  150. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_os/utils/reference_utils.py +0 -0
  151. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/__init__.py +0 -0
  152. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/base.py +0 -0
  153. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/factory.py +0 -0
  154. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/memory.py +0 -0
  155. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/multi_modal_struct.py +0 -0
  156. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
  157. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
  158. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
  159. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
  160. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
  161. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
  162. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
  163. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
  164. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
  165. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
  166. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
  167. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
  168. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +0 -0
  169. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
  170. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
  171. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/simple_struct.py +0 -0
  172. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/strategy_struct.py +0 -0
  173. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_reader/utils.py +0 -0
  174. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/__init__.py +0 -0
  175. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
  176. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
  177. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
  178. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
  179. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
  180. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
  181. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
  182. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
  183. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
  184. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/base_scheduler.py +0 -0
  185. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
  186. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
  187. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/base.py +0 -0
  188. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
  189. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
  190. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
  191. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
  192. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/general_scheduler.py +0 -0
  193. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
  194. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
  195. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
  196. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
  197. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
  198. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
  199. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
  200. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
  201. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
  202. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
  203. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
  204. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
  205. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
  206. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
  207. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
  208. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
  209. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
  210. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
  211. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
  212. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
  213. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
  214. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
  215. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
  216. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
  217. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
  218. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
  219. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
  220. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
  221. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
  222. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
  223. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
  224. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
  225. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
  226. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
  227. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
  228. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
  229. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
  230. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
  231. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
  232. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
  233. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
  234. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
  235. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
  236. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
  237. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
  238. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
  239. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
  240. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/__init__.py +0 -0
  241. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
  242. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
  243. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
  244. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
  245. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/metrics.py +0 -0
  246. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
  247. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
  248. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
  249. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
  250. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
  251. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
  252. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/factory.py +0 -0
  253. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
  254. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/mysql_user_manager.py +0 -0
  255. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/persistent_factory.py +0 -0
  256. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/persistent_user_manager.py +0 -0
  257. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
  258. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/mem_user/user_manager.py +0 -0
  259. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/__init__.py +0 -0
  260. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/activation/__init__.py +0 -0
  261. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/activation/base.py +0 -0
  262. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/activation/item.py +0 -0
  263. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/activation/kv.py +0 -0
  264. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/activation/vllmkv.py +0 -0
  265. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/base.py +0 -0
  266. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/factory.py +0 -0
  267. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/parametric/__init__.py +0 -0
  268. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/parametric/base.py +0 -0
  269. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/parametric/item.py +0 -0
  270. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/parametric/lora.py +0 -0
  271. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/__init__.py +0 -0
  272. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/base.py +0 -0
  273. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/general.py +0 -0
  274. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/item.py +0 -0
  275. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/naive.py +0 -0
  276. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
  277. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
  278. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
  279. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
  280. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
  281. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
  282. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
  283. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
  284. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/preference.py +0 -0
  285. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/simple_preference.py +0 -0
  286. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/simple_tree.py +0 -0
  287. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree.py +0 -0
  288. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
  289. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
  290. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
  291. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
  292. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
  293. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
  294. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
  295. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
  296. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
  297. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
  298. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
  299. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
  300. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
  301. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
  302. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
  303. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
  304. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
  305. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +0 -0
  306. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
  307. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
  308. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
  309. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
  310. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/dinding_report_bot.py +0 -0
  311. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/lockfree_dict.py +0 -0
  312. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/notification_service.py +0 -0
  313. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/notification_utils.py +0 -0
  314. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/singleton.py +0 -0
  315. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/thread_safe_dict.py +0 -0
  316. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
  317. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/multi_mem_cube/__init__.py +0 -0
  318. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/multi_mem_cube/composite_cube.py +0 -0
  319. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/multi_mem_cube/single_cube.py +0 -0
  320. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/multi_mem_cube/views.py +0 -0
  321. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/parsers/__init__.py +0 -0
  322. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/parsers/base.py +0 -0
  323. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/parsers/factory.py +0 -0
  324. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/parsers/markitdown.py +0 -0
  325. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/README.md +0 -0
  326. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/__init__.py +0 -0
  327. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/base.py +0 -0
  328. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/component_bootstrap.py +0 -0
  329. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/hook_defs.py +0 -0
  330. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/hooks.py +0 -0
  331. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/plugins/manager.py +0 -0
  332. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/__init__.py +0 -0
  333. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/base.py +0 -0
  334. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/concat.py +0 -0
  335. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/cosine_local.py +0 -0
  336. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/factory.py +0 -0
  337. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/http_bge.py +0 -0
  338. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/http_bge_strategy.py +0 -0
  339. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/noop.py +0 -0
  340. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/__init__.py +0 -0
  341. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/base.py +0 -0
  342. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/concat_background.py +0 -0
  343. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/concat_docsource.py +0 -0
  344. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/dialogue_common.py +0 -0
  345. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/factory.py +0 -0
  346. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/single_turn.py +0 -0
  347. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
  348. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/search/__init__.py +0 -0
  349. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/search/search_service.py +0 -0
  350. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/settings.py +0 -0
  351. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/__init__.py +0 -0
  352. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/advanced_search_prompts.py +0 -0
  353. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/cloud_service_prompt.py +0 -0
  354. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/instruction_completion.py +0 -0
  355. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_agent_prompts.py +0 -0
  356. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_feedback_prompts.py +0 -0
  357. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_reader_prompts.py +0 -0
  358. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
  359. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_scheduler_prompts.py +0 -0
  360. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mem_search_prompts.py +0 -0
  361. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/mos_prompts.py +0 -0
  362. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/prefer_complete_prompt.py +0 -0
  363. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/skill_mem_prompt.py +0 -0
  364. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/tool_mem_prompts.py +0 -0
  365. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/templates/tree_reorganize_prompts.py +0 -0
  366. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/__init__.py +0 -0
  367. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/general_types.py +0 -0
  368. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
  369. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
  370. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
  371. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
  372. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
  373. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
  374. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
  375. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
  376. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
  377. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
  378. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
  379. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
  380. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
  381. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
  382. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/utils.py +0 -0
  383. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/__init__.py +0 -0
  384. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/base.py +0 -0
  385. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/factory.py +0 -0
  386. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/item.py +0 -0
  387. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/milvus.py +0 -0
  388. {memoryos-2.0.27 → memoryos-2.0.30}/src/memos/vec_dbs/qdrant.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MemoryOS
3
- Version: 2.0.27
3
+ Version: 2.0.30
4
4
  Summary: Intelligence Begins with Memory
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -30,7 +30,7 @@ Provides-Extra: tavily
30
30
  Provides-Extra: tree-mem
31
31
  Requires-Dist: alibabacloud-oss-v2 (>=1.2.2,<1.2.3) ; extra == "all"
32
32
  Requires-Dist: alibabacloud-oss-v2 (>=1.2.2,<1.2.3) ; extra == "skill-mem"
33
- Requires-Dist: cachetools (>=6.0.0) ; extra == "all"
33
+ Requires-Dist: cachetools (>=6.0.0)
34
34
  Requires-Dist: chonkie (>=1.0.7,<2.0.0) ; extra == "all"
35
35
  Requires-Dist: chonkie (>=1.0.7,<2.0.0) ; extra == "mem-reader"
36
36
  Requires-Dist: concurrent-log-handler (>=0.9.28,<1.0.0)
@@ -4,7 +4,7 @@
4
4
  ##############################################################################
5
5
 
6
6
  name = "MemoryOS"
7
- version = "2.0.27"
7
+ version = "2.0.30"
8
8
  description = "Intelligence Begins with Memory"
9
9
  license = {text = "Apache-2.0"}
10
10
  readme = "README.md"
@@ -48,6 +48,7 @@ dependencies = [
48
48
  "python-dateutil (>=2.9.0.post0,<3.0.0)",
49
49
  "prometheus-client (>=0.23.1,<0.24.0)",
50
50
  "concurrent-log-handler (>=0.9.28,<1.0.0)", # Process-safe rotating file handler
51
+ "cachetools (>=6.0.0)", # Embedding request caching
51
52
  ]
52
53
 
53
54
  [project.urls]
@@ -128,7 +129,6 @@ all = [
128
129
  "datasketch (>=1.6.5,<2.0.0)",
129
130
  "jieba (>=0.38.1,<0.42.1)",
130
131
  "rank-bm25 (>=0.2.2)",
131
- "cachetools (>=6.0.0)",
132
132
  # NOT exist in the above optional groups
133
133
  # Because they are either huge-size dependencies or infrequently used dependencies.
134
134
  # We kindof don't want users to install them.
@@ -1,4 +1,4 @@
1
- __version__ = "2.0.27"
1
+ __version__ = "2.0.30"
2
2
 
3
3
  from memos.configs.mem_cube import GeneralMemCubeConfig
4
4
  from memos.configs.mem_os import MOSConfig
@@ -622,6 +622,7 @@ class APIConfig:
622
622
  "provider": os.getenv("MOS_EMBEDDER_PROVIDER", "openai"),
623
623
  "api_key": os.getenv("MOS_EMBEDDER_API_KEY", "sk-xxxx"),
624
624
  "model_name_or_path": os.getenv("MOS_EMBEDDER_MODEL", "text-embedding-3-large"),
625
+ "embedding_dims": int(os.getenv("EMBEDDING_DIMENSION", "1024")),
625
626
  "headers_extra": json.loads(os.getenv("MOS_EMBEDDER_HEADERS_EXTRA", "{}")),
626
627
  "base_url": os.getenv("MOS_EMBEDDER_API_BASE", "http://openai.com"),
627
628
  "backup_client": os.getenv("MOS_EMBEDDER_BACKUP_CLIENT", "false").lower()
@@ -1,4 +1,5 @@
1
1
  import re
2
+ import uuid
2
3
 
3
4
  from abc import ABC, abstractmethod
4
5
 
@@ -17,6 +18,12 @@ class Chunk:
17
18
  class BaseChunker(ABC):
18
19
  """Base class for all text chunkers."""
19
20
 
21
+ _URL_PATTERN = r'https?://[^\s<>"{}|\\^`\[\]]+'
22
+ _URL_PLACEHOLDER_PREFIX = "__URL_"
23
+ _URL_PLACEHOLDER_PATTERN = re.compile(
24
+ rf"{re.escape(_URL_PLACEHOLDER_PREFIX)}(?:[0-9a-f]+_)?\d+__"
25
+ )
26
+
20
27
  @abstractmethod
21
28
  def __init__(self, config: BaseChunkerConfig):
22
29
  """Initialize the chunker with the given configuration."""
@@ -25,6 +32,17 @@ class BaseChunker(ABC):
25
32
  def chunk(self, text: str) -> list[Chunk]:
26
33
  """Chunk the given text into smaller chunks."""
27
34
 
35
+ @classmethod
36
+ def _new_url_placeholder_prefix(cls, text: str) -> str:
37
+ """Return a placeholder namespace that cannot collide with the input."""
38
+ if cls._URL_PLACEHOLDER_PREFIX not in text:
39
+ return cls._URL_PLACEHOLDER_PREFIX
40
+
41
+ while True:
42
+ placeholder_prefix = f"{cls._URL_PLACEHOLDER_PREFIX}{uuid.uuid4().hex[:8]}_"
43
+ if placeholder_prefix not in text:
44
+ return placeholder_prefix
45
+
28
46
  def protect_urls(self, text: str) -> tuple[str, dict[str, str]]:
29
47
  """
30
48
  Protect URLs in text from being split during chunking.
@@ -35,16 +53,16 @@ class BaseChunker(ABC):
35
53
  Returns:
36
54
  tuple: (Text with URLs replaced by placeholders, URL mapping dictionary)
37
55
  """
38
- url_pattern = r'https?://[^\s<>"{}|\\^`\[\]]+'
39
- url_map = {}
56
+ url_map: dict[str, str] = {}
57
+ placeholder_prefix = self._new_url_placeholder_prefix(text)
40
58
 
41
59
  def replace_url(match):
42
60
  url = match.group(0)
43
- placeholder = f"__URL_{len(url_map)}__"
61
+ placeholder = f"{placeholder_prefix}{len(url_map)}__"
44
62
  url_map[placeholder] = url
45
63
  return placeholder
46
64
 
47
- protected_text = re.sub(url_pattern, replace_url, text)
65
+ protected_text = re.sub(self._URL_PATTERN, replace_url, text)
48
66
  return protected_text, url_map
49
67
 
50
68
  def restore_urls(self, text: str, url_map: dict[str, str]) -> str:
@@ -58,8 +76,6 @@ class BaseChunker(ABC):
58
76
  Returns:
59
77
  str: Text with URLs restored
60
78
  """
61
- restored_text = text
62
- for placeholder, url in url_map.items():
63
- restored_text = restored_text.replace(placeholder, url)
64
-
65
- return restored_text
79
+ return self._URL_PLACEHOLDER_PATTERN.sub(
80
+ lambda match: url_map.get(match.group(0), match.group(0)), text
81
+ )
@@ -0,0 +1,113 @@
1
+ from .base import BaseChunker
2
+
3
+
4
+ class SimpleTextSplitter(BaseChunker):
5
+ """Simple text splitter wrapper."""
6
+
7
+ def __init__(self, chunk_size: int, chunk_overlap: int):
8
+ if chunk_size <= 0:
9
+ raise ValueError("chunk_size must be greater than 0")
10
+ if chunk_overlap < 0:
11
+ raise ValueError("chunk_overlap must be non-negative")
12
+ if chunk_overlap >= chunk_size:
13
+ raise ValueError("chunk_overlap must be smaller than chunk_size")
14
+
15
+ self.chunk_size = chunk_size
16
+ self.chunk_overlap = chunk_overlap
17
+
18
+ def chunk(self, text: str, **kwargs) -> list[str]:
19
+ return self._simple_split_text(text, self.chunk_size, self.chunk_overlap)
20
+
21
+ @classmethod
22
+ def _placeholder_spans(
23
+ cls, protected_text: str, url_map: dict[str, str]
24
+ ) -> list[tuple[int, int]]:
25
+ """Return the protected-text ranges occupied by URL placeholders."""
26
+ return [
27
+ (match.start(), match.end())
28
+ for match in cls._URL_PLACEHOLDER_PATTERN.finditer(protected_text)
29
+ if match.group(0) in url_map
30
+ ]
31
+
32
+ @staticmethod
33
+ def _align_end_to_placeholder(
34
+ end: int,
35
+ start: int,
36
+ chunk_overlap: int,
37
+ placeholder_spans: list[tuple[int, int]],
38
+ ) -> int:
39
+ """Move a chunk end away from the middle of a URL placeholder."""
40
+ for placeholder_start, placeholder_end in placeholder_spans:
41
+ if placeholder_start < end < placeholder_end:
42
+ if placeholder_start - start > chunk_overlap:
43
+ return placeholder_start
44
+ return placeholder_end
45
+ return end
46
+
47
+ @staticmethod
48
+ def _align_start_to_placeholder(
49
+ next_start: int,
50
+ previous_start: int,
51
+ placeholder_spans: list[tuple[int, int]],
52
+ ) -> int:
53
+ """Keep overlap starts from landing in the middle of a URL placeholder."""
54
+ for placeholder_start, placeholder_end in placeholder_spans:
55
+ if placeholder_start < next_start < placeholder_end:
56
+ if placeholder_start > previous_start:
57
+ return placeholder_start
58
+ return placeholder_end
59
+ return next_start
60
+
61
+ def _simple_split_text(self, text: str, chunk_size: int, chunk_overlap: int) -> list[str]:
62
+ """
63
+ Simple text splitter as fallback when langchain is not available.
64
+
65
+ Args:
66
+ text: Text to split
67
+ chunk_size: Maximum size of chunks
68
+ chunk_overlap: Overlap between chunks
69
+
70
+ Returns:
71
+ List of text chunks
72
+ """
73
+ protected_text, url_map = self.protect_urls(text)
74
+
75
+ if not protected_text or len(protected_text) <= chunk_size:
76
+ chunks = [protected_text] if protected_text.strip() else []
77
+ return [self.restore_urls(chunk, url_map) for chunk in chunks]
78
+
79
+ chunks = []
80
+ start = 0
81
+ text_len = len(protected_text)
82
+ placeholder_spans = self._placeholder_spans(protected_text, url_map)
83
+
84
+ while start < text_len:
85
+ # Calculate end position
86
+ end = min(start + chunk_size, text_len)
87
+
88
+ # If not the last chunk, try to break at a good position
89
+ if end < text_len:
90
+ # Try to break at newline, sentence end, or space
91
+ for separator in ["\n\n", "\n", "。", "!", "?", ". ", "! ", "? ", " "]:
92
+ last_sep = protected_text.rfind(separator, start, end)
93
+ if last_sep == -1:
94
+ continue
95
+ split_end = last_sep + len(separator)
96
+ if split_end - start > chunk_overlap:
97
+ end = split_end
98
+ break
99
+
100
+ end = self._align_end_to_placeholder(end, start, chunk_overlap, placeholder_spans)
101
+
102
+ chunk = protected_text[start:end].strip()
103
+ if chunk:
104
+ chunks.append(chunk)
105
+
106
+ if end >= text_len:
107
+ break
108
+
109
+ # Move start position with overlap
110
+ next_start = max(start + 1, end - chunk_overlap)
111
+ start = self._align_start_to_placeholder(next_start, start, placeholder_spans)
112
+
113
+ return [self.restore_urls(chunk, url_map) for chunk in chunks]
@@ -28,6 +28,11 @@ class OpenAILLMConfig(BaseLLMConfig):
28
28
  default="https://api.openai.com/v1", description="Base URL for OpenAI API"
29
29
  )
30
30
  extra_body: Any = Field(default=None, description="extra body")
31
+ enable_thinking: bool | None = Field(
32
+ default=None,
33
+ description="Enable/disable thinking mode for models that support it (e.g. Qwen3, DeepSeek-R1). "
34
+ "When None (default), the provider's default behavior is preserved.",
35
+ )
31
36
  backup_client: bool = Field(
32
37
  default=False,
33
38
  description="Whether to enable backup client for fallback on primary failure",
@@ -91,6 +96,12 @@ class AzureLLMConfig(BaseLLMConfig):
91
96
  description="API version for Azure OpenAI",
92
97
  )
93
98
  api_key: str = Field(..., description="API key for Azure OpenAI")
99
+ extra_body: Any = Field(default=None, description="Extra request body parameters")
100
+ enable_thinking: bool | None = Field(
101
+ default=None,
102
+ description="Enable/disable thinking mode for models that support it. "
103
+ "When None (default), the provider's default behavior is preserved.",
104
+ )
94
105
 
95
106
 
96
107
  class AzureResponsesLLMConfig(BaseLLMConfig):
@@ -1,18 +1,23 @@
1
+ from __future__ import annotations
2
+
1
3
  import os
2
4
  import threading
3
5
 
4
6
  from collections import Counter
5
7
  from concurrent.futures import Future
6
- from typing import Any
7
-
8
- from cachetools import LRUCache, TTLCache
8
+ from typing import TYPE_CHECKING, Any
9
9
 
10
10
  from memos.context.context import get_current_trace_id
11
+ from memos.dependency import require_python_package
11
12
  from memos.embedders.base import BaseEmbedder
12
13
  from memos.exceptions import EmbedderError
13
14
  from memos.log import get_logger
14
15
 
15
16
 
17
+ if TYPE_CHECKING:
18
+ from cachetools import LRUCache, TTLCache
19
+
20
+
16
21
  logger = get_logger(__name__)
17
22
 
18
23
 
@@ -68,9 +73,16 @@ def _env_int(name: str, default: int, minimum: int = 1) -> int:
68
73
  class CachingEmbedder(BaseEmbedder):
69
74
  """Add exact caches and singleflight coordination to an embedder."""
70
75
 
76
+ @require_python_package(
77
+ import_name="cachetools",
78
+ install_command="pip install 'cachetools>=6.0.0'",
79
+ )
71
80
  def __init__(self, backend: BaseEmbedder):
81
+ from cachetools import LRUCache, TTLCache
82
+
72
83
  self._backend = backend
73
84
  self.config = backend.config
85
+ self._lru_cache_cls: type[LRUCache] = LRUCache
74
86
  self._lock = threading.RLock()
75
87
  self._inflight: dict[str, Future[CachedVector]] = {}
76
88
  self._stats: Counter[str] = Counter()
@@ -196,7 +208,7 @@ class CachingEmbedder(BaseEmbedder):
196
208
  return None
197
209
  request_cache = self._request_caches.get(request_id)
198
210
  if request_cache is None:
199
- request_cache = LRUCache(maxsize=self._request_cache_text_limit)
211
+ request_cache = self._lru_cache_cls(maxsize=self._request_cache_text_limit)
200
212
  self._request_caches[request_id] = request_cache
201
213
  return request_cache
202
214
 
@@ -0,0 +1,148 @@
1
+ import os
2
+
3
+ from openai import AzureOpenAI as AzureClient
4
+ from openai import BadRequestError
5
+ from openai import OpenAI as OpenAIClient
6
+
7
+ from memos.configs.embedder import UniversalAPIEmbedderConfig
8
+ from memos.embedders.base import BaseEmbedder, log_embedding_call
9
+ from memos.log import get_logger
10
+
11
+
12
+ logger = get_logger(__name__)
13
+
14
+
15
+ def _sanitize_unicode(text: str) -> str:
16
+ """
17
+ Remove Unicode surrogates and other problematic characters.
18
+ Surrogates (U+D800-U+DFFF) cause UnicodeEncodeError with some APIs.
19
+ """
20
+ try:
21
+ # Encode with 'surrogatepass' then decode, replacing invalid chars
22
+ cleaned = text.encode("utf-8", errors="surrogatepass").decode("utf-8", errors="replace")
23
+ # Replace replacement char with empty string for cleaner output
24
+ return cleaned.replace("\ufffd", "")
25
+ except Exception:
26
+ # Fallback: remove all non-BMP characters
27
+ return "".join(c for c in text if ord(c) < 0x10000)
28
+
29
+
30
+ class UniversalAPIEmbedder(BaseEmbedder):
31
+ def __init__(self, config: UniversalAPIEmbedderConfig):
32
+ self.provider = config.provider
33
+ self.config = config
34
+
35
+ if self.provider == "openai":
36
+ self.client = OpenAIClient(
37
+ api_key=config.api_key,
38
+ base_url=config.base_url,
39
+ default_headers=config.headers_extra if config.headers_extra else None,
40
+ )
41
+ elif self.provider == "azure":
42
+ self.client = AzureClient(
43
+ azure_endpoint=config.base_url,
44
+ api_version="2024-03-01-preview",
45
+ api_key=config.api_key,
46
+ )
47
+ else:
48
+ raise ValueError(f"Embeddings unsupported provider: {self.provider}")
49
+ self.use_backup_client = config.backup_client
50
+ if self.use_backup_client:
51
+ self.backup_client = OpenAIClient(
52
+ api_key=config.backup_api_key,
53
+ base_url=config.backup_base_url,
54
+ default_headers=config.backup_headers_extra
55
+ if config.backup_headers_extra
56
+ else None,
57
+ )
58
+
59
+ @staticmethod
60
+ def _build_embedding_kwargs(model: str, texts: list[str], embedding_dims: int | None) -> dict:
61
+ kwargs = {"model": model, "input": texts}
62
+ if embedding_dims is not None:
63
+ kwargs["dimensions"] = embedding_dims
64
+ return kwargs
65
+
66
+ @staticmethod
67
+ def _is_dimensions_unsupported(error: BadRequestError) -> bool:
68
+ body = getattr(error, "body", None)
69
+ details = body.get("error", body) if isinstance(body, dict) else {}
70
+ if isinstance(details, dict):
71
+ param = str(details.get("param") or "").lower()
72
+ code = str(details.get("code") or "").lower()
73
+ if param == "dimensions" and any(
74
+ marker in code for marker in ("unsupported", "unknown", "unrecognized")
75
+ ):
76
+ return True
77
+
78
+ messages = [str(error)]
79
+ if isinstance(details, dict) and isinstance(details.get("message"), str):
80
+ messages.append(details["message"])
81
+ message = " ".join(messages).lower()
82
+ unsupported_markers = (
83
+ "dimensions is not supported",
84
+ "dimensions not supported",
85
+ "does not support dimensions",
86
+ "unsupported parameter: dimensions",
87
+ "unknown parameter: dimensions",
88
+ "does not support matryoshka",
89
+ "changing output dimensions is unsupported",
90
+ "changing output dimensions will lead",
91
+ )
92
+ return any(marker in message for marker in unsupported_markers)
93
+
94
+ def _call_embeddings_api(
95
+ self, client, model: str, texts: list[str], timeout: int
96
+ ) -> list[list[float]]:
97
+ embedding_dims = getattr(self.config, "embedding_dims", None)
98
+ kwargs = self._build_embedding_kwargs(model, texts, embedding_dims)
99
+
100
+ try:
101
+ response = client.embeddings.create(**kwargs, timeout=timeout)
102
+ except BadRequestError as error:
103
+ if embedding_dims is None or not self._is_dimensions_unsupported(error):
104
+ raise
105
+
106
+ logger.warning(
107
+ "Embedding provider rejected dimensions=%d; retrying without dimensions",
108
+ embedding_dims,
109
+ )
110
+ fallback_kwargs = self._build_embedding_kwargs(model, texts, None)
111
+ response = client.embeddings.create(**fallback_kwargs, timeout=timeout)
112
+
113
+ return [item.embedding for item in response.data]
114
+
115
+ @log_embedding_call
116
+ def embed(self, texts: list[str]) -> list[list[float]]:
117
+ if isinstance(texts, str):
118
+ texts = [texts]
119
+ texts = [_sanitize_unicode(t) for t in texts]
120
+ texts = self._truncate_texts(texts)
121
+ if self.provider == "openai" or self.provider == "azure":
122
+ timeout = int(os.getenv("MOS_EMBEDDER_TIMEOUT", 5))
123
+ try:
124
+ model = getattr(self.config, "model_name_or_path", "text-embedding-3-large")
125
+ return self._call_embeddings_api(self.client, model, texts, timeout)
126
+ except Exception as e:
127
+ if self.use_backup_client:
128
+ logger.warning(
129
+ "Embedding request failed error_type=%s; trying backup client",
130
+ type(e).__name__,
131
+ )
132
+ try:
133
+ backup_model = getattr(
134
+ self.config,
135
+ "backup_model_name_or_path",
136
+ "text-embedding-3-large",
137
+ )
138
+ return self._call_embeddings_api(
139
+ self.backup_client, backup_model, texts, timeout
140
+ )
141
+ except Exception as e_backup:
142
+ raise ValueError(
143
+ f"Backup embeddings request ended with error: {e_backup}"
144
+ ) from e_backup
145
+ else:
146
+ raise ValueError(f"Embeddings request ended with error: {e}") from e
147
+ else:
148
+ raise ValueError(f"Embeddings unsupported provider: {self.provider}")
@@ -2,6 +2,7 @@ import json
2
2
  import time
3
3
 
4
4
  from collections.abc import Generator
5
+ from typing import Any
5
6
 
6
7
  import openai
7
8
 
@@ -19,6 +20,13 @@ from memos.utils import timed_with_status
19
20
  logger = get_logger(__name__)
20
21
 
21
22
 
23
+ def _merge_enable_thinking(extra_body: Any, enable_thinking: bool | None) -> Any:
24
+ """Merge provider-specific thinking control into the SDK's extra request body."""
25
+ if enable_thinking is None:
26
+ return extra_body
27
+ return {**(extra_body or {}), "enable_thinking": enable_thinking}
28
+
29
+
22
30
  class OpenAILLM(BaseLLM):
23
31
  """OpenAI LLM class via openai.chat.completions.create."""
24
32
 
@@ -61,6 +69,22 @@ class OpenAILLM(BaseLLM):
61
69
  return reasoning_content + (response_content or "")
62
70
  return response_content or ""
63
71
 
72
+ def _build_request_body(self, messages: MessageList, **kwargs) -> dict:
73
+ enable_thinking = kwargs.get("enable_thinking", self.config.enable_thinking)
74
+ extra_body = _merge_enable_thinking(
75
+ kwargs.get("extra_body", self.config.extra_body), enable_thinking
76
+ )
77
+ request_body = {
78
+ "model": kwargs.get("model_name_or_path", self.config.model_name_or_path),
79
+ "messages": messages,
80
+ "temperature": kwargs.get("temperature", self.config.temperature),
81
+ "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
82
+ "top_p": kwargs.get("top_p", self.config.top_p),
83
+ "extra_body": extra_body,
84
+ "tools": kwargs.get("tools", NOT_GIVEN),
85
+ }
86
+ return request_body
87
+
64
88
  @timed_with_status(
65
89
  log_prefix="OpenAI LLM",
66
90
  log_extra_args=lambda self, messages, **kwargs: {
@@ -70,15 +94,7 @@ class OpenAILLM(BaseLLM):
70
94
  )
71
95
  def generate(self, messages: MessageList, **kwargs) -> str:
72
96
  """Generate a response from OpenAI LLM, optionally overriding generation params."""
73
- request_body = {
74
- "model": kwargs.get("model_name_or_path", self.config.model_name_or_path),
75
- "messages": messages,
76
- "temperature": kwargs.get("temperature", self.config.temperature),
77
- "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
78
- "top_p": kwargs.get("top_p", self.config.top_p),
79
- "extra_body": kwargs.get("extra_body", self.config.extra_body),
80
- "tools": kwargs.get("tools", NOT_GIVEN),
81
- }
97
+ request_body = self._build_request_body(messages, **kwargs)
82
98
  start_time = time.perf_counter()
83
99
  logger.info(f"OpenAI LLM Request body: {request_body}")
84
100
 
@@ -121,16 +137,8 @@ class OpenAILLM(BaseLLM):
121
137
  logger.info("stream api not support tools")
122
138
  return
123
139
 
124
- request_body = {
125
- "model": self.config.model_name_or_path,
126
- "messages": messages,
127
- "stream": True,
128
- "temperature": kwargs.get("temperature", self.config.temperature),
129
- "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
130
- "top_p": kwargs.get("top_p", self.config.top_p),
131
- "extra_body": kwargs.get("extra_body", self.config.extra_body),
132
- "tools": kwargs.get("tools", NOT_GIVEN),
133
- }
140
+ request_body = self._build_request_body(messages, **kwargs)
141
+ request_body["stream"] = True
134
142
 
135
143
  logger.info(f"OpenAI LLM Stream Request body: {request_body}")
136
144
  response = self.client.chat.completions.create(**request_body)
@@ -184,15 +192,19 @@ class AzureLLM(BaseLLM):
184
192
 
185
193
  def generate(self, messages: MessageList, **kwargs) -> str:
186
194
  """Generate a response from Azure OpenAI LLM."""
187
- response = self.client.chat.completions.create(
188
- model=self.config.model_name_or_path,
189
- messages=messages,
190
- temperature=kwargs.get("temperature", self.config.temperature),
191
- max_tokens=kwargs.get("max_tokens", self.config.max_tokens),
192
- top_p=kwargs.get("top_p", self.config.top_p),
193
- tools=kwargs.get("tools", NOT_GIVEN),
194
- extra_body=kwargs.get("extra_body", self.config.extra_body),
195
- )
195
+ enable_thinking = kwargs.get("enable_thinking", self.config.enable_thinking)
196
+ request_body = {
197
+ "model": self.config.model_name_or_path,
198
+ "messages": messages,
199
+ "temperature": kwargs.get("temperature", self.config.temperature),
200
+ "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
201
+ "top_p": kwargs.get("top_p", self.config.top_p),
202
+ "tools": kwargs.get("tools", NOT_GIVEN),
203
+ "extra_body": _merge_enable_thinking(
204
+ kwargs.get("extra_body", self.config.extra_body), enable_thinking
205
+ ),
206
+ }
207
+ response = self.client.chat.completions.create(**request_body)
196
208
  logger.info(f"Response from Azure OpenAI: {response.model_dump_json()}")
197
209
  if not response.choices:
198
210
  logger.warning("Azure OpenAI response has no choices")
@@ -212,15 +224,19 @@ class AzureLLM(BaseLLM):
212
224
  logger.info("stream api not support tools")
213
225
  return
214
226
 
215
- response = self.client.chat.completions.create(
216
- model=self.config.model_name_or_path,
217
- messages=messages,
218
- stream=True,
219
- temperature=kwargs.get("temperature", self.config.temperature),
220
- max_tokens=kwargs.get("max_tokens", self.config.max_tokens),
221
- top_p=kwargs.get("top_p", self.config.top_p),
222
- extra_body=kwargs.get("extra_body", self.config.extra_body),
223
- )
227
+ enable_thinking = kwargs.get("enable_thinking", self.config.enable_thinking)
228
+ request_body = {
229
+ "model": self.config.model_name_or_path,
230
+ "messages": messages,
231
+ "stream": True,
232
+ "temperature": kwargs.get("temperature", self.config.temperature),
233
+ "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
234
+ "top_p": kwargs.get("top_p", self.config.top_p),
235
+ "extra_body": _merge_enable_thinking(
236
+ kwargs.get("extra_body", self.config.extra_body), enable_thinking
237
+ ),
238
+ }
239
+ response = self.client.chat.completions.create(**request_body)
224
240
 
225
241
  reasoning_started = False
226
242
 
@@ -1,5 +1,6 @@
1
1
  import json
2
2
 
3
+ from collections.abc import Generator
3
4
  from typing import Any, cast
4
5
 
5
6
  import openai
@@ -152,7 +153,7 @@ class VLLMLLM(BaseLLM):
152
153
  prompt_parts.append(f"{role.capitalize()}: {content}")
153
154
  return "\n".join(prompt_parts)
154
155
 
155
- def generate_stream(self, messages: list[MessageDict], **kwargs):
156
+ def generate_stream(self, messages: list[MessageDict], **kwargs) -> Generator[str, None, None]:
156
157
  """
157
158
  Generate a response from the model using streaming.
158
159
  Yields content chunks as they are received.
@@ -185,11 +186,14 @@ class VLLMLLM(BaseLLM):
185
186
  reasoning_started = True
186
187
  yield delta.reasoning
187
188
 
188
- if hasattr(delta, "content") and delta.content:
189
- if reasoning_started and not self.config.remove_think_prefix:
190
- yield "</think>"
191
- reasoning_started = False
192
- yield delta.content
189
+ if hasattr(delta, "content") and delta.content:
190
+ if reasoning_started and not self.config.remove_think_prefix:
191
+ yield "</think>"
192
+ reasoning_started = False
193
+ yield delta.content
194
+
195
+ if reasoning_started and not self.config.remove_think_prefix:
196
+ yield "</think>"
193
197
 
194
198
  else:
195
199
  raise RuntimeError("API client is not available")