memu-py 1.2.0__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/workflows/pr-title.yml +1 -1
- {memu_py-1.2.0 → memu_py-1.3.0}/CHANGELOG.md +28 -0
- memu_py-1.3.0/PKG-INFO +634 -0
- memu_py-1.3.0/README.md +597 -0
- memu_py-1.3.0/docs/integrations/grok.md +53 -0
- memu_py-1.3.0/docs/langgraph_integration.md +97 -0
- memu_py-1.3.0/docs/providers/grok.md +66 -0
- memu_py-1.3.0/docs/sealos_use_case.md +54 -0
- memu_py-1.3.0/docs/tutorials/getting_started.md +181 -0
- memu_py-1.3.0/examples/example_4_openrouter_memory.py +112 -0
- memu_py-1.3.0/examples/example_5_with_lazyllm_client.py +250 -0
- memu_py-1.3.0/examples/getting_started_robust.py +107 -0
- memu_py-1.3.0/examples/langgraph_demo.py +76 -0
- memu_py-1.3.0/examples/proactive/memory/config.py +66 -0
- memu_py-1.3.0/examples/proactive/memory/local/common.py +31 -0
- memu_py-1.3.0/examples/proactive/memory/local/memorize.py +38 -0
- memu_py-1.3.0/examples/proactive/memory/local/tools.py +42 -0
- memu_py-1.3.0/examples/proactive/memory/platform/memorize.py +31 -0
- memu_py-1.3.0/examples/proactive/memory/platform/tools.py +52 -0
- memu_py-1.3.0/examples/proactive/proactive.py +198 -0
- memu_py-1.3.0/examples/sealos_support_agent.py +70 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/pyproject.toml +13 -1
- memu_py-1.3.0/readme/README_en.md +595 -0
- memu_py-1.3.0/readme/README_es.md +598 -0
- memu_py-1.3.0/readme/README_fr.md +599 -0
- memu_py-1.3.0/readme/README_ja.md +596 -0
- memu_py-1.3.0/readme/README_ko.md +595 -0
- memu_py-1.3.0/readme/README_zh.md +593 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/service.py +13 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/settings.py +24 -1
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/models.py +4 -2
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/models.py +3 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/models.py +3 -1
- memu_py-1.3.0/src/memu/integrations/__init__.py +3 -0
- memu_py-1.3.0/src/memu/integrations/langgraph.py +163 -0
- memu_py-1.3.0/src/memu/llm/backends/__init__.py +7 -0
- memu_py-1.3.0/src/memu/llm/backends/grok.py +11 -0
- memu_py-1.3.0/src/memu/llm/backends/openrouter.py +70 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/http_client.py +19 -0
- memu_py-1.3.0/src/memu/llm/lazyllm_client.py +134 -0
- memu_py-1.3.0/tests/__init__.py +0 -0
- memu_py-1.3.0/tests/integrations/test_langgraph.py +80 -0
- memu_py-1.3.0/tests/llm/test_grok_provider.py +46 -0
- memu_py-1.3.0/tests/test_lazyllm.py +91 -0
- memu_py-1.3.0/tests/test_openrouter.py +161 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/tests/test_postgres.py +2 -2
- memu_py-1.3.0/tests/utils/test_conversation.py +91 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/uv.lock +863 -3
- memu_py-1.2.0/PKG-INFO +0 -476
- memu_py-1.2.0/README.md +0 -446
- memu_py-1.2.0/README_zh.md +0 -582
- memu_py-1.2.0/src/memu/llm/backends/__init__.py +0 -5
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/ISSUE_TEMPLATE/hackathon_task.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/ISSUE_TEMPLATE/improvement_suggestion.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/workflows/build.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.github/workflows/release-please.yml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.gitignore +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.pre-commit-config.yaml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/.python-version +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/CONTRIBUTING.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/Cargo.lock +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/Cargo.toml +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/LICENSE.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/MANIFEST.in +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/Makefile +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/banner.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/benchmark.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/memorize.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/LazyLLM.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/buddie.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/bytebase.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/jazz.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/openagents.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/partners/xroute.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/qrcode.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/retrieve.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/star.gif +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/structure.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_companion-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_creation-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_edu-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_ip-0000.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_robot-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_role_play-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/assets/usecase/ai_therapy-0000.jpg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/docs/sqlite.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/example_1_conversation_memory.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/example_2_skill_extraction.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/example_3_multimodal_memory.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/activities.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/experiences.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/goals.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/habits.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/knowledge.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/opinions.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/personal_info.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/preferences.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/relationships.md +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/output/conversation_example/work_life.md +0 -0
- {memu_py-1.2.0/src/memu/blob → memu_py-1.3.0/examples/proactive/memory/local}/__init__.py +0 -0
- {memu_py-1.2.0/src/memu/prompts/retrieve → memu_py-1.3.0/examples/proactive/memory/platform}/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/conversations/conv1.json +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/conversations/conv2.json +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/conversations/conv3.json +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/docs/doc1.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/docs/doc2.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/images/image1.png +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/logs/log1.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/logs/log2.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/examples/resources/logs/log3.txt +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/setup.cfg +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/lib.rs +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/_core.pyi +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/crud.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/memorize.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/patch.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/app/retrieve.py +0 -0
- {memu_py-1.2.0/tests → memu_py-1.3.0/src/memu/blob}/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/blob/local_fs.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/factory.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/models.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/category_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/filter.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/memory_category_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/memory_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/repositories/resource_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/state.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/inmemory/vector.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/interfaces.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/migration.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/migrations/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/migrations/env.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/postgres.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/base.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/category_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/memory_category_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/memory_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/repositories/resource_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/schema.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/postgres/session.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/repositories/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/repositories/category_item.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/repositories/memory_category.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/repositories/memory_item.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/repositories/resource.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/base.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/category_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/memory_category_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/memory_item_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/repositories/resource_repo.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/schema.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/session.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/sqlite/sqlite.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/database/state.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/backends/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/backends/base.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/backends/doubao.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/backends/openai.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/http_client.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/embedding/openai_sdk.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/backends/base.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/backends/doubao.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/backends/openai.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/openai_sdk.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/llm/wrapper.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/category_patch/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/category_patch/category.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/category_summary/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/category_summary/category.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/behavior.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/event.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/knowledge.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/profile.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/memory_type/skill.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/audio.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/conversation.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/document.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/image.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/preprocess/video.py +0 -0
- /memu_py-1.2.0/docs/.gitkeep → /memu_py-1.3.0/src/memu/prompts/retrieve/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/judger.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/llm_category_ranker.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/llm_item_ranker.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/llm_resource_ranker.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/pre_retrieval_decision.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/query_rewriter.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/prompts/retrieve/query_rewriter_judger.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/utils/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/utils/conversation.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/utils/video.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/workflow/__init__.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/workflow/interceptor.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/workflow/pipeline.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/workflow/runner.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/src/memu/workflow/step.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/tests/example/example_conversation.json +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/tests/rust_entry_test.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/tests/test_inmemory.py +0 -0
- {memu_py-1.2.0 → memu_py-1.3.0}/tests/test_sqlite.py +0 -0
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0](https://github.com/NevaMind-AI/memU/compare/v1.2.0...v1.3.0) (2026-01-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add happened at and extra fields to memory item ([#262](https://github.com/NevaMind-AI/memU/issues/262)) ([77938e9](https://github.com/NevaMind-AI/memU/commit/77938e9c282e1c0eda11088675c35975d85c4ff0))
|
|
9
|
+
* add proactive example ([#268](https://github.com/NevaMind-AI/memU/issues/268)) ([d3d1de1](https://github.com/NevaMind-AI/memU/commit/d3d1de1d9b0f45d9b14479cbaa4462458b172005))
|
|
10
|
+
* add Sealos support agent use case (Track G) ([#255](https://github.com/NevaMind-AI/memU/issues/255)) ([8fbdf3c](https://github.com/NevaMind-AI/memU/commit/8fbdf3c301f74f2aa85604837e00bb305b8801ec))
|
|
11
|
+
* integrate LazyLLM to provide more llm services ([#265](https://github.com/NevaMind-AI/memU/issues/265)) ([c03f639](https://github.com/NevaMind-AI/memU/commit/c03f639677d6c897b75dfe28d0cd92d5b5270957))
|
|
12
|
+
* **integrations:** Add LangGraph Adapter for MemU (Track A) ([#258](https://github.com/NevaMind-AI/memU/issues/258)) ([50b5502](https://github.com/NevaMind-AI/memU/commit/50b5502ebcacd86401f98b1bb7e5a6577fab7126))
|
|
13
|
+
* **llm:** add Grok (xAI) integration ([#179](https://github.com/NevaMind-AI/memU/issues/179)) ([#236](https://github.com/NevaMind-AI/memU/issues/236)) ([1e16309](https://github.com/NevaMind-AI/memU/commit/1e1630948af535f8ed9d608e6c4f9d2748d4ce8e))
|
|
14
|
+
* Openrouter integration as backend provider ([#182](https://github.com/NevaMind-AI/memU/issues/182)) ([cba667a](https://github.com/NevaMind-AI/memU/commit/cba667a56daca5093c9b79a598c7d2ffda813756))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* memory type & proactive example ([#272](https://github.com/NevaMind-AI/memU/issues/272)) ([710f14d](https://github.com/NevaMind-AI/memU/commit/710f14d4b171c5cde609a9dc2caf454681ab94b3))
|
|
20
|
+
* proactive examples ([#273](https://github.com/NevaMind-AI/memU/issues/273)) ([603ae12](https://github.com/NevaMind-AI/memU/commit/603ae122b94741bb350656086960c4e2bb868c2a))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
* Add link to memU bot ([#276](https://github.com/NevaMind-AI/memU/issues/276)) ([2f84231](https://github.com/NevaMind-AI/memU/commit/2f842311ed592c1a45cdb9e24f7a128da97a0a39))
|
|
26
|
+
* multilingual readme ([#271](https://github.com/NevaMind-AI/memU/issues/271)) ([200f47a](https://github.com/NevaMind-AI/memU/commit/200f47a15ff7d05fc435abe1d2cefbb3774548fe))
|
|
27
|
+
* Update memU bot link to include full URL ([#277](https://github.com/NevaMind-AI/memU/issues/277)) ([6874eaf](https://github.com/NevaMind-AI/memU/commit/6874eaf278e910d07a4427dd4c06f9c4c21283ce))
|
|
28
|
+
* update readme ([#266](https://github.com/NevaMind-AI/memU/issues/266)) ([16ae534](https://github.com/NevaMind-AI/memU/commit/16ae534675a5e0711256a5e2147b9190fd8b2524))
|
|
29
|
+
* update README ([#270](https://github.com/NevaMind-AI/memU/issues/270)) ([b531d39](https://github.com/NevaMind-AI/memU/commit/b531d39e5538449b31cb212aea1deea24e12180f))
|
|
30
|
+
|
|
3
31
|
## [1.2.0](https://github.com/NevaMind-AI/memU/compare/v1.1.2...v1.2.0) (2026-01-14)
|
|
4
32
|
|
|
5
33
|
|
memu_py-1.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: memu-py
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Classifier: Development Status :: 4 - Beta
|
|
5
|
+
Classifier: Intended Audience :: Developers
|
|
6
|
+
Classifier: Operating System :: OS Independent
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
9
|
+
Requires-Dist: defusedxml>=0.7.1
|
|
10
|
+
Requires-Dist: httpx>=0.28.1
|
|
11
|
+
Requires-Dist: numpy>=2.3.4
|
|
12
|
+
Requires-Dist: openai>=2.8.0
|
|
13
|
+
Requires-Dist: pydantic>=2.12.4
|
|
14
|
+
Requires-Dist: sqlmodel>=0.0.27
|
|
15
|
+
Requires-Dist: alembic>=1.14.0
|
|
16
|
+
Requires-Dist: pendulum>=3.1.0
|
|
17
|
+
Requires-Dist: langchain-core>=1.2.7
|
|
18
|
+
Requires-Dist: lazyllm>=0.7.3
|
|
19
|
+
Requires-Dist: claude-agent-sdk>=0.1.24 ; extra == 'claude'
|
|
20
|
+
Requires-Dist: langgraph>=0.0.10 ; extra == 'langgraph'
|
|
21
|
+
Requires-Dist: langchain-core>=0.1.0 ; extra == 'langgraph'
|
|
22
|
+
Requires-Dist: pgvector>=0.3.4 ; extra == 'postgres'
|
|
23
|
+
Requires-Dist: sqlalchemy[postgresql-psycopgbinary]>=2.0.36 ; extra == 'postgres'
|
|
24
|
+
Provides-Extra: claude
|
|
25
|
+
Provides-Extra: langgraph
|
|
26
|
+
Provides-Extra: postgres
|
|
27
|
+
License-File: LICENSE.txt
|
|
28
|
+
Summary: AI Memory and Conversation Management Framework - Simple as mem0, Powerful as MemU
|
|
29
|
+
Keywords: ai,memory,conversation,llm,chatbot,agent
|
|
30
|
+
Author-email: MemU Team <contact@nevamind.ai>
|
|
31
|
+
Requires-Python: >=3.13
|
|
32
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
33
|
+
Project-URL: Bug Tracker, https://github.com/NevaMind-AI/MemU/issues
|
|
34
|
+
Project-URL: Documentation, https://github.com/NevaMind-AI/MemU#readme
|
|
35
|
+
Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
<div align="center">
|
|
40
|
+
|
|
41
|
+
# memU
|
|
42
|
+
|
|
43
|
+
### Always-On Proactive Memory for AI Agents
|
|
44
|
+
|
|
45
|
+
[](https://badge.fury.io/py/memu-py)
|
|
46
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
47
|
+
[](https://www.python.org/downloads/)
|
|
48
|
+
[](https://discord.gg/memu)
|
|
49
|
+
[](https://x.com/memU_ai)
|
|
50
|
+
|
|
51
|
+
<a href="https://trendshift.io/repositories/17374" target="_blank"><img src="https://trendshift.io/api/badge/repositories/17374" alt="NevaMind-AI%2FmemU | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
|
52
|
+
|
|
53
|
+
**[English](readme/README_en.md) | [中文](readme/README_zh.md) | [日本語](readme/README_ja.md) | [한국어](readme/README_ko.md) | [Español](readme/README_es.md) | [Français](readme/README_fr.md)**
|
|
54
|
+
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
memU is a memory framework built for **24/7 proactive agents**.
|
|
60
|
+
It is designed for long-running use and greatly **reduces the LLM token cost** of keeping agents always online, making always-on, evolving agents practical in production systems.
|
|
61
|
+
memU **continuously captures and understands user intent**. Even without a command, the agent can tell what you are about to do and act on it by itself.
|
|
62
|
+
|
|
63
|
+
check our [memU bot](https://memu.bot)
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## ⭐️ Star the repository
|
|
68
|
+
|
|
69
|
+
<img width="100%" src="https://github.com/NevaMind-AI/memU/blob/main/assets/star.gif" />
|
|
70
|
+
If you find memU useful or interesting, a GitHub Star ⭐️ would be greatly appreciated.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
## ✨ Core Features
|
|
76
|
+
|
|
77
|
+
| Capability | Description |
|
|
78
|
+
|------------|-------------|
|
|
79
|
+
| 🤖 **24/7 Proactive Agent** | Always-on memory agent that works continuously in the background—never sleeps, never forgets |
|
|
80
|
+
| 🎯 **User Intention Capture** | Understands and remembers user goals, preferences, and context across sessions automatically |
|
|
81
|
+
| 💰 **Cost Efficient** | Reduces long-running token costs by caching insights and avoiding redundant LLM calls |
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 🔄 How Proactive Memory Works
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
|
|
88
|
+
cd examples/proactive
|
|
89
|
+
python proactive.py
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Proactive Memory Lifecycle
|
|
96
|
+
```
|
|
97
|
+
┌─────────────────────────────────────────────────┐
|
|
98
|
+
│ 1. USER INITIAL QUERY │
|
|
99
|
+
│ └─ User input, context, or any trigger event │
|
|
100
|
+
│ Conversation starts here │
|
|
101
|
+
└─────────────────────────────────────────────────┘
|
|
102
|
+
↓
|
|
103
|
+
┌─────────────────────────────────────────────────┐
|
|
104
|
+
│ 2. AGENT PLANNING / ACTIONS │
|
|
105
|
+
│ └─ Analyze request, execute tasks │
|
|
106
|
+
│ Retrieve relevant memories for context │
|
|
107
|
+
└─────────────────────────────────────────────────┘
|
|
108
|
+
↓
|
|
109
|
+
┌─────────────────────────────────────────────────┐
|
|
110
|
+
│ 3. MEMORIZE & UPDATE TODOLIST │
|
|
111
|
+
│ └─ Store new insights, facts, preferences │
|
|
112
|
+
│ Modify task list based on progress │
|
|
113
|
+
└─────────────────────────────────────────────────┘
|
|
114
|
+
↓
|
|
115
|
+
┌─────────────────────────────────────────────────┐
|
|
116
|
+
│ 4. PREDICT USER INTENT │
|
|
117
|
+
│ └─ Anticipate next steps and needs │
|
|
118
|
+
│ Proactively prepare relevant context │
|
|
119
|
+
└─────────────────────────────────────────────────┘
|
|
120
|
+
↓
|
|
121
|
+
┌─────────────────────────────────────────────────┐
|
|
122
|
+
│ 5. LOOP (2 → 4) │
|
|
123
|
+
│ └─ Continuous iteration until task complete │
|
|
124
|
+
│ Agent-driven proactive workflow │
|
|
125
|
+
└─────────────────────────────────────────────────┘
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🎯 Proactive Use Cases
|
|
131
|
+
|
|
132
|
+
### 1. **Information Recommendation**
|
|
133
|
+
*Agent monitors interests and proactively surfaces relevant content*
|
|
134
|
+
```python
|
|
135
|
+
# User has been researching AI topics
|
|
136
|
+
MemU tracks: reading history, saved articles, search queries
|
|
137
|
+
|
|
138
|
+
# When new content arrives:
|
|
139
|
+
Agent: "I found 3 new papers on RAG optimization that align with
|
|
140
|
+
your recent research on retrieval systems. One author
|
|
141
|
+
(Dr. Chen) you've cited before published yesterday."
|
|
142
|
+
|
|
143
|
+
# Proactive behaviors:
|
|
144
|
+
- Learns topic preferences from browsing patterns
|
|
145
|
+
- Tracks author/source credibility preferences
|
|
146
|
+
- Filters noise based on engagement history
|
|
147
|
+
- Times recommendations for optimal attention
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 2. **Email Management**
|
|
151
|
+
*Agent learns communication patterns and handles routine correspondence*
|
|
152
|
+
```python
|
|
153
|
+
# MemU observes email patterns over time:
|
|
154
|
+
- Response templates for common scenarios
|
|
155
|
+
- Priority contacts and urgent keywords
|
|
156
|
+
- Scheduling preferences and availability
|
|
157
|
+
- Writing style and tone variations
|
|
158
|
+
|
|
159
|
+
# Proactive email assistance:
|
|
160
|
+
Agent: "You have 12 new emails. I've drafted responses for 3 routine
|
|
161
|
+
requests and flagged 2 urgent items from your priority contacts.
|
|
162
|
+
Should I also reschedule tomorrow's meeting based on the
|
|
163
|
+
conflict John mentioned?"
|
|
164
|
+
|
|
165
|
+
# Autonomous actions:
|
|
166
|
+
✓ Draft context-aware replies
|
|
167
|
+
✓ Categorize and prioritize inbox
|
|
168
|
+
✓ Detect scheduling conflicts
|
|
169
|
+
✓ Summarize long threads with key decisions
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 3. **Trading & Financial Monitoring**
|
|
173
|
+
*Agent tracks market context and user investment behavior*
|
|
174
|
+
```python
|
|
175
|
+
# MemU learns trading preferences:
|
|
176
|
+
- Risk tolerance from historical decisions
|
|
177
|
+
- Preferred sectors and asset classes
|
|
178
|
+
- Response patterns to market events
|
|
179
|
+
- Portfolio rebalancing triggers
|
|
180
|
+
|
|
181
|
+
# Proactive alerts:
|
|
182
|
+
Agent: "NVDA dropped 5% in after-hours trading. Based on your past
|
|
183
|
+
behavior, you typically buy tech dips above 3%. Your current
|
|
184
|
+
allocation allows for $2,000 additional exposure while
|
|
185
|
+
maintaining your 70/30 equity-bond target."
|
|
186
|
+
|
|
187
|
+
# Continuous monitoring:
|
|
188
|
+
- Track price alerts tied to user-defined thresholds
|
|
189
|
+
- Correlate news events with portfolio impact
|
|
190
|
+
- Learn from executed vs. ignored recommendations
|
|
191
|
+
- Anticipate tax-loss harvesting opportunities
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
...
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 🗂️ Hierarchical Memory Architecture
|
|
200
|
+
|
|
201
|
+
MemU's three-layer system enables both **reactive queries** and **proactive context loading**:
|
|
202
|
+
|
|
203
|
+
<img width="100%" alt="structure" src="assets/structure.png" />
|
|
204
|
+
|
|
205
|
+
| Layer | Reactive Use | Proactive Use |
|
|
206
|
+
|-------|--------------|---------------|
|
|
207
|
+
| **Resource** | Direct access to original data | Background monitoring for new patterns |
|
|
208
|
+
| **Item** | Targeted fact retrieval | Real-time extraction from ongoing interactions |
|
|
209
|
+
| **Category** | Summary-level overview | Automatic context assembly for anticipation |
|
|
210
|
+
|
|
211
|
+
**Proactive Benefits:**
|
|
212
|
+
- **Auto-categorization**: New memories self-organize into topics
|
|
213
|
+
- **Pattern Detection**: System identifies recurring themes
|
|
214
|
+
- **Context Prediction**: Anticipates what information will be needed next
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 🚀 Quick Start
|
|
219
|
+
|
|
220
|
+
### Option 1: Cloud Version
|
|
221
|
+
|
|
222
|
+
Experience proactive memory instantly:
|
|
223
|
+
|
|
224
|
+
👉 **[memu.so](https://memu.so)** - Hosted service with 7×24 continuous learning
|
|
225
|
+
|
|
226
|
+
For enterprise deployment with custom proactive workflows, contact **info@nevamind.ai**
|
|
227
|
+
|
|
228
|
+
#### Cloud API (v3)
|
|
229
|
+
|
|
230
|
+
| Base URL | `https://api.memu.so` |
|
|
231
|
+
|----------|----------------------|
|
|
232
|
+
| Auth | `Authorization: Bearer YOUR_API_KEY` |
|
|
233
|
+
|
|
234
|
+
| Method | Endpoint | Description |
|
|
235
|
+
|--------|----------|-------------|
|
|
236
|
+
| `POST` | `/api/v3/memory/memorize` | Register continuous learning task |
|
|
237
|
+
| `GET` | `/api/v3/memory/memorize/status/{task_id}` | Check real-time processing status |
|
|
238
|
+
| `POST` | `/api/v3/memory/categories` | List auto-generated categories |
|
|
239
|
+
| `POST` | `/api/v3/memory/retrieve` | Query memory (supports proactive context loading) |
|
|
240
|
+
|
|
241
|
+
📚 **[Full API Documentation](https://memu.pro/docs#cloud-version)**
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### Option 2: Self-Hosted
|
|
246
|
+
|
|
247
|
+
#### Installation
|
|
248
|
+
```bash
|
|
249
|
+
pip install -e .
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### Basic Example
|
|
253
|
+
|
|
254
|
+
> **Requirements**: Python 3.13+ and an OpenAI API key
|
|
255
|
+
|
|
256
|
+
**Test Continuous Learning** (in-memory):
|
|
257
|
+
```bash
|
|
258
|
+
export OPENAI_API_KEY=your_api_key
|
|
259
|
+
cd tests
|
|
260
|
+
python test_inmemory.py
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Test with Persistent Storage** (PostgreSQL):
|
|
264
|
+
```bash
|
|
265
|
+
# Start PostgreSQL with pgvector
|
|
266
|
+
docker run -d \
|
|
267
|
+
--name memu-postgres \
|
|
268
|
+
-e POSTGRES_USER=postgres \
|
|
269
|
+
-e POSTGRES_PASSWORD=postgres \
|
|
270
|
+
-e POSTGRES_DB=memu \
|
|
271
|
+
-p 5432:5432 \
|
|
272
|
+
pgvector/pgvector:pg16
|
|
273
|
+
|
|
274
|
+
# Run continuous learning test
|
|
275
|
+
export OPENAI_API_KEY=your_api_key
|
|
276
|
+
cd tests
|
|
277
|
+
python test_postgres.py
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Both examples demonstrate **proactive memory workflows**:
|
|
281
|
+
1. **Continuous Ingestion**: Process multiple files sequentially
|
|
282
|
+
2. **Auto-Extraction**: Immediate memory creation
|
|
283
|
+
3. **Proactive Retrieval**: Context-aware memory surfacing
|
|
284
|
+
|
|
285
|
+
See [`tests/test_inmemory.py`](tests/test_inmemory.py) and [`tests/test_postgres.py`](tests/test_postgres.py) for implementation details.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
### Custom LLM and Embedding Providers
|
|
290
|
+
|
|
291
|
+
MemU supports custom LLM and embedding providers beyond OpenAI. Configure them via `llm_profiles`:
|
|
292
|
+
```python
|
|
293
|
+
from memu import MemUService
|
|
294
|
+
|
|
295
|
+
service = MemUService(
|
|
296
|
+
llm_profiles={
|
|
297
|
+
# Default profile for LLM operations
|
|
298
|
+
"default": {
|
|
299
|
+
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
300
|
+
"api_key": "your_api_key",
|
|
301
|
+
"chat_model": "qwen3-max",
|
|
302
|
+
"client_backend": "sdk" # "sdk" or "http"
|
|
303
|
+
},
|
|
304
|
+
# Separate profile for embeddings
|
|
305
|
+
"embedding": {
|
|
306
|
+
"base_url": "https://api.voyageai.com/v1",
|
|
307
|
+
"api_key": "your_voyage_api_key",
|
|
308
|
+
"embed_model": "voyage-3.5-lite"
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
# ... other configuration
|
|
312
|
+
)
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
### OpenRouter Integration
|
|
318
|
+
|
|
319
|
+
MemU supports [OpenRouter](https://openrouter.ai) as a model provider, giving you access to multiple LLM providers through a single API.
|
|
320
|
+
|
|
321
|
+
#### Configuration
|
|
322
|
+
```python
|
|
323
|
+
from memu import MemoryService
|
|
324
|
+
|
|
325
|
+
service = MemoryService(
|
|
326
|
+
llm_profiles={
|
|
327
|
+
"default": {
|
|
328
|
+
"provider": "openrouter",
|
|
329
|
+
"client_backend": "httpx",
|
|
330
|
+
"base_url": "https://openrouter.ai",
|
|
331
|
+
"api_key": "your_openrouter_api_key",
|
|
332
|
+
"chat_model": "anthropic/claude-3.5-sonnet", # Any OpenRouter model
|
|
333
|
+
"embed_model": "openai/text-embedding-3-small", # Embedding model
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
database_config={
|
|
337
|
+
"metadata_store": {"provider": "inmemory"},
|
|
338
|
+
},
|
|
339
|
+
)
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
#### Environment Variables
|
|
343
|
+
|
|
344
|
+
| Variable | Description |
|
|
345
|
+
|----------|-------------|
|
|
346
|
+
| `OPENROUTER_API_KEY` | Your OpenRouter API key from [openrouter.ai/keys](https://openrouter.ai/keys) |
|
|
347
|
+
|
|
348
|
+
#### Supported Features
|
|
349
|
+
|
|
350
|
+
| Feature | Status | Notes |
|
|
351
|
+
|---------|--------|-------|
|
|
352
|
+
| Chat Completions | Supported | Works with any OpenRouter chat model |
|
|
353
|
+
| Embeddings | Supported | Use OpenAI embedding models via OpenRouter |
|
|
354
|
+
| Vision | Supported | Use vision-capable models (e.g., `openai/gpt-4o`) |
|
|
355
|
+
|
|
356
|
+
#### Running OpenRouter Tests
|
|
357
|
+
```bash
|
|
358
|
+
export OPENROUTER_API_KEY=your_api_key
|
|
359
|
+
|
|
360
|
+
# Full workflow test (memorize + retrieve)
|
|
361
|
+
python tests/test_openrouter.py
|
|
362
|
+
|
|
363
|
+
# Embedding-specific tests
|
|
364
|
+
python tests/test_openrouter_embedding.py
|
|
365
|
+
|
|
366
|
+
# Vision-specific tests
|
|
367
|
+
python tests/test_openrouter_vision.py
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
See [`examples/example_4_openrouter_memory.py`](examples/example_4_openrouter_memory.py) for a complete working example.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 📖 Core APIs
|
|
375
|
+
|
|
376
|
+
### `memorize()` - Continuous Learning Pipeline
|
|
377
|
+
|
|
378
|
+
Processes inputs in real-time and immediately updates memory:
|
|
379
|
+
|
|
380
|
+
<img width="100%" alt="memorize" src="assets/memorize.png" />
|
|
381
|
+
```python
|
|
382
|
+
result = await service.memorize(
|
|
383
|
+
resource_url="path/to/file.json", # File path or URL
|
|
384
|
+
modality="conversation", # conversation | document | image | video | audio
|
|
385
|
+
user={"user_id": "123"} # Optional: scope to a user
|
|
386
|
+
)
|
|
387
|
+
|
|
388
|
+
# Returns immediately with extracted memory:
|
|
389
|
+
{
|
|
390
|
+
"resource": {...}, # Stored resource metadata
|
|
391
|
+
"items": [...], # Extracted memory items (available instantly)
|
|
392
|
+
"categories": [...] # Auto-updated category structure
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
**Proactive Features:**
|
|
397
|
+
- Zero-delay processing—memories available immediately
|
|
398
|
+
- Automatic categorization without manual tagging
|
|
399
|
+
- Cross-reference with existing memories for pattern detection
|
|
400
|
+
|
|
401
|
+
### `retrieve()` - Dual-Mode Intelligence
|
|
402
|
+
|
|
403
|
+
MemU supports both **proactive context loading** and **reactive querying**:
|
|
404
|
+
|
|
405
|
+
<img width="100%" alt="retrieve" src="assets/retrieve.png" />
|
|
406
|
+
|
|
407
|
+
#### RAG-based Retrieval (`method="rag"`)
|
|
408
|
+
|
|
409
|
+
Fast **proactive context assembly** using embeddings:
|
|
410
|
+
|
|
411
|
+
- ✅ **Instant context**: Sub-second memory surfacing
|
|
412
|
+
- ✅ **Background monitoring**: Can run continuously without LLM costs
|
|
413
|
+
- ✅ **Similarity scoring**: Identifies most relevant memories automatically
|
|
414
|
+
|
|
415
|
+
#### LLM-based Retrieval (`method="llm"`)
|
|
416
|
+
|
|
417
|
+
Deep **anticipatory reasoning** for complex contexts:
|
|
418
|
+
|
|
419
|
+
- ✅ **Intent prediction**: LLM infers what user needs before they ask
|
|
420
|
+
- ✅ **Query evolution**: Automatically refines search as context develops
|
|
421
|
+
- ✅ **Early termination**: Stops when sufficient context is gathered
|
|
422
|
+
|
|
423
|
+
#### Comparison
|
|
424
|
+
|
|
425
|
+
| Aspect | RAG (Fast Context) | LLM (Deep Reasoning) |
|
|
426
|
+
|--------|-------------------|---------------------|
|
|
427
|
+
| **Speed** | ⚡ Milliseconds | 🐢 Seconds |
|
|
428
|
+
| **Cost** | 💰 Embedding only | 💰💰 LLM inference |
|
|
429
|
+
| **Proactive use** | Continuous monitoring | Triggered context loading |
|
|
430
|
+
| **Best for** | Real-time suggestions | Complex anticipation |
|
|
431
|
+
|
|
432
|
+
#### Usage
|
|
433
|
+
```python
|
|
434
|
+
# Proactive retrieval with context history
|
|
435
|
+
result = await service.retrieve(
|
|
436
|
+
queries=[
|
|
437
|
+
{"role": "user", "content": {"text": "What are their preferences?"}},
|
|
438
|
+
{"role": "user", "content": {"text": "Tell me about work habits"}}
|
|
439
|
+
],
|
|
440
|
+
where={"user_id": "123"}, # Optional: scope filter
|
|
441
|
+
method="rag" # or "llm" for deeper reasoning
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
# Returns context-aware results:
|
|
445
|
+
{
|
|
446
|
+
"categories": [...], # Relevant topic areas (auto-prioritized)
|
|
447
|
+
"items": [...], # Specific memory facts
|
|
448
|
+
"resources": [...], # Original sources for traceability
|
|
449
|
+
"next_step_query": "..." # Predicted follow-up context
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
**Proactive Filtering**: Use `where` to scope continuous monitoring:
|
|
454
|
+
- `where={"user_id": "123"}` - User-specific context
|
|
455
|
+
- `where={"agent_id__in": ["1", "2"]}` - Multi-agent coordination
|
|
456
|
+
- Omit `where` for global context awareness
|
|
457
|
+
|
|
458
|
+
> 📚 **For complete API documentation**, see [SERVICE_API.md](docs/SERVICE_API.md) - includes proactive workflow patterns, pipeline configuration, and real-time update handling.
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
## 💡 Proactive Scenarios
|
|
463
|
+
|
|
464
|
+
### Example 1: Always-Learning Assistant
|
|
465
|
+
|
|
466
|
+
Continuously learns from every interaction without explicit memory commands:
|
|
467
|
+
```bash
|
|
468
|
+
export OPENAI_API_KEY=your_api_key
|
|
469
|
+
python examples/example_1_conversation_memory.py
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**Proactive Behavior:**
|
|
473
|
+
- Automatically extracts preferences from casual mentions
|
|
474
|
+
- Builds relationship models from interaction patterns
|
|
475
|
+
- Surfaces relevant context in future conversations
|
|
476
|
+
- Adapts communication style based on learned preferences
|
|
477
|
+
|
|
478
|
+
**Best for:** Personal AI assistants, customer support that remembers, social chatbots
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
### Example 2: Self-Improving Agent
|
|
483
|
+
|
|
484
|
+
Learns from execution logs and proactively suggests optimizations:
|
|
485
|
+
```bash
|
|
486
|
+
export OPENAI_API_KEY=your_api_key
|
|
487
|
+
python examples/example_2_skill_extraction.py
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
**Proactive Behavior:**
|
|
491
|
+
- Monitors agent actions and outcomes continuously
|
|
492
|
+
- Identifies patterns in successes and failures
|
|
493
|
+
- Auto-generates skill guides from experience
|
|
494
|
+
- Proactively suggests strategies for similar future tasks
|
|
495
|
+
|
|
496
|
+
**Best for:** DevOps automation, agent self-improvement, knowledge capture
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
### Example 3: Multimodal Context Builder
|
|
501
|
+
|
|
502
|
+
Unifies memory across different input types for comprehensive context:
|
|
503
|
+
```bash
|
|
504
|
+
export OPENAI_API_KEY=your_api_key
|
|
505
|
+
python examples/example_3_multimodal_memory.py
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**Proactive Behavior:**
|
|
509
|
+
- Cross-references text, images, and documents automatically
|
|
510
|
+
- Builds unified understanding across modalities
|
|
511
|
+
- Surfaces visual context when discussing related topics
|
|
512
|
+
- Anticipates information needs by combining multiple sources
|
|
513
|
+
|
|
514
|
+
**Best for:** Documentation systems, learning platforms, research assistants
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## 📊 Performance
|
|
519
|
+
|
|
520
|
+
MemU achieves **92.09% average accuracy** on the Locomo benchmark across all reasoning tasks, demonstrating reliable proactive memory operations.
|
|
521
|
+
|
|
522
|
+
<img width="100%" alt="benchmark" src="https://github.com/user-attachments/assets/6fec4884-94e5-4058-ad5c-baac3d7e76d9" />
|
|
523
|
+
|
|
524
|
+
View detailed experimental data: [memU-experiment](https://github.com/NevaMind-AI/memU-experiment)
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## 🧩 Ecosystem
|
|
529
|
+
|
|
530
|
+
| Repository | Description | Proactive Features |
|
|
531
|
+
|------------|-------------|-------------------|
|
|
532
|
+
| **[memU](https://github.com/NevaMind-AI/memU)** | Core proactive memory engine | 7×24 learning pipeline, auto-categorization |
|
|
533
|
+
| **[memU-server](https://github.com/NevaMind-AI/memU-server)** | Backend with continuous sync | Real-time memory updates, webhook triggers |
|
|
534
|
+
| **[memU-ui](https://github.com/NevaMind-AI/memU-ui)** | Visual memory dashboard | Live memory evolution monitoring |
|
|
535
|
+
|
|
536
|
+
**Quick Links:**
|
|
537
|
+
- 🚀 [Try MemU Cloud](https://app.memu.so/quick-start)
|
|
538
|
+
- 📚 [API Documentation](https://memu.pro/docs)
|
|
539
|
+
- 💬 [Discord Community](https://discord.gg/memu)
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## 🤝 Partners
|
|
544
|
+
|
|
545
|
+
<div align="center">
|
|
546
|
+
|
|
547
|
+
<a href="https://github.com/TEN-framework/ten-framework"><img src="https://avatars.githubusercontent.com/u/113095513?s=200&v=4" alt="Ten" height="40" style="margin: 10px;"></a>
|
|
548
|
+
<a href="https://openagents.org"><img src="assets/partners/openagents.png" alt="OpenAgents" height="40" style="margin: 10px;"></a>
|
|
549
|
+
<a href="https://github.com/milvus-io/milvus"><img src="https://miro.medium.com/v2/resize:fit:2400/1*-VEGyAgcIBD62XtZWavy8w.png" alt="Milvus" height="40" style="margin: 10px;"></a>
|
|
550
|
+
<a href="https://xroute.ai/"><img src="assets/partners/xroute.png" alt="xRoute" height="40" style="margin: 10px;"></a>
|
|
551
|
+
<a href="https://jaaz.app/"><img src="assets/partners/jazz.png" alt="Jazz" height="40" style="margin: 10px;"></a>
|
|
552
|
+
<a href="https://github.com/Buddie-AI/Buddie"><img src="assets/partners/buddie.png" alt="Buddie" height="40" style="margin: 10px;"></a>
|
|
553
|
+
<a href="https://github.com/bytebase/bytebase"><img src="assets/partners/bytebase.png" alt="Bytebase" height="40" style="margin: 10px;"></a>
|
|
554
|
+
<a href="https://github.com/LazyAGI/LazyLLM"><img src="assets/partners/LazyLLM.png" alt="LazyLLM" height="40" style="margin: 10px;"></a>
|
|
555
|
+
|
|
556
|
+
</div>
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
## 🤝 How to Contribute
|
|
561
|
+
|
|
562
|
+
We welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
|
|
563
|
+
|
|
564
|
+
### Getting Started
|
|
565
|
+
|
|
566
|
+
To start contributing to MemU, you'll need to set up your development environment:
|
|
567
|
+
|
|
568
|
+
#### Prerequisites
|
|
569
|
+
- Python 3.13+
|
|
570
|
+
- [uv](https://github.com/astral-sh/uv) (Python package manager)
|
|
571
|
+
- Git
|
|
572
|
+
|
|
573
|
+
#### Setup Development Environment
|
|
574
|
+
```bash
|
|
575
|
+
# 1. Fork and clone the repository
|
|
576
|
+
git clone https://github.com/YOUR_USERNAME/memU.git
|
|
577
|
+
cd memU
|
|
578
|
+
|
|
579
|
+
# 2. Install development dependencies
|
|
580
|
+
make install
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
The `make install` command will:
|
|
584
|
+
- Create a virtual environment using `uv`
|
|
585
|
+
- Install all project dependencies
|
|
586
|
+
- Set up pre-commit hooks for code quality checks
|
|
587
|
+
|
|
588
|
+
#### Running Quality Checks
|
|
589
|
+
|
|
590
|
+
Before submitting your contribution, ensure your code passes all quality checks:
|
|
591
|
+
```bash
|
|
592
|
+
make check
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
The `make check` command runs:
|
|
596
|
+
- **Lock file verification**: Ensures `pyproject.toml` consistency
|
|
597
|
+
- **Pre-commit hooks**: Lints code with Ruff, formats with Black
|
|
598
|
+
- **Type checking**: Runs `mypy` for static type analysis
|
|
599
|
+
- **Dependency analysis**: Uses `deptry` to find obsolete dependencies
|
|
600
|
+
|
|
601
|
+
### Contributing Guidelines
|
|
602
|
+
|
|
603
|
+
For detailed contribution guidelines, code standards, and development practices, please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
604
|
+
|
|
605
|
+
**Quick tips:**
|
|
606
|
+
- Create a new branch for each feature or bug fix
|
|
607
|
+
- Write clear commit messages
|
|
608
|
+
- Add tests for new functionality
|
|
609
|
+
- Update documentation as needed
|
|
610
|
+
- Run `make check` before pushing
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
## 📄 License
|
|
615
|
+
|
|
616
|
+
[Apache License 2.0](LICENSE.txt)
|
|
617
|
+
|
|
618
|
+
---
|
|
619
|
+
|
|
620
|
+
## 🌍 Community
|
|
621
|
+
|
|
622
|
+
- **GitHub Issues**: [Report bugs & request features](https://github.com/NevaMind-AI/memU/issues)
|
|
623
|
+
- **Discord**: [Join the community](https://discord.com/invite/hQZntfGsbJ)
|
|
624
|
+
- **X (Twitter)**: [Follow @memU_ai](https://x.com/memU_ai)
|
|
625
|
+
- **Contact**: info@nevamind.ai
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
<div align="center">
|
|
630
|
+
|
|
631
|
+
⭐ **Star us on GitHub** to get notified about new releases!
|
|
632
|
+
|
|
633
|
+
</div>
|
|
634
|
+
|