From bc1da6ddf350adfd50b3fc0e2fd4e32f87eaa811 Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Wed, 5 Nov 2025 13:52:21 -0800 Subject: [PATCH 1/6] fix: fix packaging scripts --- scripts/packaging/build_packages.sh | 12 ++++++------ scripts/packaging/setup_client.py | 5 ++++- scripts/packaging/setup_server.py | 7 +++++-- scripts/start_server.py | 0 4 files changed, 15 insertions(+), 9 deletions(-) mode change 100644 => 100755 scripts/start_server.py diff --git a/scripts/packaging/build_packages.sh b/scripts/packaging/build_packages.sh index 2c03217..0e9728b 100755 --- a/scripts/packaging/build_packages.sh +++ b/scripts/packaging/build_packages.sh @@ -42,7 +42,7 @@ echo -e "${BLUE}[3/5] Building mirix-client package...${NC}" python scripts/packaging/setup_client.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Client package built successfully${NC}" - CLIENT_VERSION=$(ls dist/mirix_client-*.whl | head -1 | grep -oP '\d+\.\d+\.\d+') + CLIENT_VERSION=$(ls dist/mirix-client-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') echo -e " Version: ${GREEN}${CLIENT_VERSION}${NC}" else echo -e "${RED}✗ Client package build failed${NC}" @@ -55,7 +55,7 @@ echo -e "${BLUE}[4/5] Building mirix-server package...${NC}" python scripts/packaging/setup_server.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Server package built successfully${NC}" - SERVER_VERSION=$(ls dist/mirix_server-*.whl | head -1 | grep -oP '\d+\.\d+\.\d+') + SERVER_VERSION=$(ls dist/mirix-server-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') echo -e " Version: ${GREEN}${SERVER_VERSION}${NC}" else echo -e "${RED}✗ Server package build failed${NC}" @@ -69,17 +69,17 @@ echo -e "${BLUE}=================================================${NC}" echo -e "Built packages in: ${GREEN}dist/${NC}" echo "" echo -e "Client Package:" -ls -lh dist/mirix_client-* | awk '{print " " $9 " (" $5 ")"}' +ls -lh dist/mirix-client-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' echo "" echo -e "Server Package:" -ls -lh dist/mirix_server-* | awk '{print " " $9 " (" $5 ")"}' +ls -lh dist/mirix-server-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' echo "" echo -e "${BLUE}=================================================${NC}" echo -e "${GREEN}✓ All packages built successfully!${NC}" echo "" echo "To install locally:" -echo -e " ${BLUE}pip install dist/mirix_client-${CLIENT_VERSION}-py3-none-any.whl${NC}" -echo -e " ${BLUE}pip install dist/mirix_server-${SERVER_VERSION}-py3-none-any.whl${NC}" +echo -e " ${BLUE}pip install dist/mirix-client-${CLIENT_VERSION}-py3-none-any.whl${NC}" +echo -e " ${BLUE}pip install dist/mirix-server-${SERVER_VERSION}-py3-none-any.whl${NC}" echo "" echo "To publish to PyPI:" echo -e " ${BLUE}twine upload dist/mirix-client-${CLIENT_VERSION}*${NC}" diff --git a/scripts/packaging/setup_client.py b/scripts/packaging/setup_client.py index 17ca702..6b39f1d 100644 --- a/scripts/packaging/setup_client.py +++ b/scripts/packaging/setup_client.py @@ -43,6 +43,9 @@ def get_version(): "pytz>=2024.1", ] +# Change to project root directory so we can use relative paths +os.chdir(project_root) + setup( name="mirix-client", version=get_version(), @@ -65,7 +68,7 @@ def get_version(): "mirix.schemas.openai", "mirix.helpers", ], - package_dir={"": project_root}, + package_dir={"": "."}, include_package_data=True, package_data={ "mirix": [], diff --git a/scripts/packaging/setup_server.py b/scripts/packaging/setup_server.py index cb13384..98e7e1c 100644 --- a/scripts/packaging/setup_server.py +++ b/scripts/packaging/setup_server.py @@ -135,6 +135,9 @@ def get_version(): ], } +# Change to project root directory so we can use relative paths +os.chdir(project_root) + setup( name="mirix-server", version=get_version(), @@ -152,10 +155,10 @@ def get_version(): }, # Include all packages packages=find_packages( - where=project_root, + where=".", exclude=["tests*", "scripts*", "frontend*", "public_evaluations*", "samples*"] ), - package_dir={"": project_root}, + package_dir={"": "."}, include_package_data=True, package_data={ "mirix": [ diff --git a/scripts/start_server.py b/scripts/start_server.py old mode 100644 new mode 100755 From 1c45b6b13874478d97a143f1c90bef32e9bd23d9 Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Wed, 5 Nov 2025 13:55:00 -0800 Subject: [PATCH 2/6] fix: fix packaging scripts and rename the repo --- scripts/packaging/build_packages.sh | 22 ++++++++++++---------- scripts/packaging/setup_client.py | 4 ++-- scripts/packaging/setup_server.py | 8 ++++---- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/scripts/packaging/build_packages.sh b/scripts/packaging/build_packages.sh index 0e9728b..e53f01e 100755 --- a/scripts/packaging/build_packages.sh +++ b/scripts/packaging/build_packages.sh @@ -28,6 +28,8 @@ rm -rf dist/ rm -rf *.egg-info rm -rf mirix_client.egg-info rm -rf mirix_server.egg-info +rm -rf intuit_ecms_client.egg-info +rm -rf intuit_ecms_server.egg-info echo -e "${GREEN}✓ Cleaned${NC}" echo "" @@ -38,11 +40,11 @@ echo -e "${GREEN}✓ Build tools ready${NC}" echo "" # Build client package -echo -e "${BLUE}[3/5] Building mirix-client package...${NC}" +echo -e "${BLUE}[3/5] Building intuit-ecms-client package...${NC}" python scripts/packaging/setup_client.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Client package built successfully${NC}" - CLIENT_VERSION=$(ls dist/mirix-client-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') + CLIENT_VERSION=$(ls dist/intuit_ecms_client-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') echo -e " Version: ${GREEN}${CLIENT_VERSION}${NC}" else echo -e "${RED}✗ Client package build failed${NC}" @@ -51,11 +53,11 @@ fi echo "" # Build server package -echo -e "${BLUE}[4/5] Building mirix-server package...${NC}" +echo -e "${BLUE}[4/5] Building intuit-ecms-server package...${NC}" python scripts/packaging/setup_server.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Server package built successfully${NC}" - SERVER_VERSION=$(ls dist/mirix-server-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') + SERVER_VERSION=$(ls dist/intuit_ecms_server-*.whl 2>/dev/null | head -1 | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/') echo -e " Version: ${GREEN}${SERVER_VERSION}${NC}" else echo -e "${RED}✗ Server package build failed${NC}" @@ -69,21 +71,21 @@ echo -e "${BLUE}=================================================${NC}" echo -e "Built packages in: ${GREEN}dist/${NC}" echo "" echo -e "Client Package:" -ls -lh dist/mirix-client-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' +ls -lh dist/intuit_ecms_client-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' echo "" echo -e "Server Package:" -ls -lh dist/mirix-server-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' +ls -lh dist/intuit_ecms_server-* 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' echo "" echo -e "${BLUE}=================================================${NC}" echo -e "${GREEN}✓ All packages built successfully!${NC}" echo "" echo "To install locally:" -echo -e " ${BLUE}pip install dist/mirix-client-${CLIENT_VERSION}-py3-none-any.whl${NC}" -echo -e " ${BLUE}pip install dist/mirix-server-${SERVER_VERSION}-py3-none-any.whl${NC}" +echo -e " ${BLUE}pip install dist/intuit_ecms_client-${CLIENT_VERSION}-py3-none-any.whl${NC}" +echo -e " ${BLUE}pip install dist/intuit_ecms_server-${SERVER_VERSION}-py3-none-any.whl${NC}" echo "" echo "To publish to PyPI:" -echo -e " ${BLUE}twine upload dist/mirix-client-${CLIENT_VERSION}*${NC}" -echo -e " ${BLUE}twine upload dist/mirix-server-${SERVER_VERSION}*${NC}" +echo -e " ${BLUE}twine upload dist/intuit-ecms-client-${CLIENT_VERSION}*${NC}" +echo -e " ${BLUE}twine upload dist/intuit-ecms-server-${SERVER_VERSION}*${NC}" echo "" echo "To test packages:" echo -e " ${BLUE}twine check dist/*${NC}" diff --git a/scripts/packaging/setup_client.py b/scripts/packaging/setup_client.py index 6b39f1d..dc1f9f9 100644 --- a/scripts/packaging/setup_client.py +++ b/scripts/packaging/setup_client.py @@ -47,11 +47,11 @@ def get_version(): os.chdir(project_root) setup( - name="mirix-client", + name="intuit-ecms-client", version=get_version(), author="Mirix AI", author_email="yuwang@mirix.io", - description="Mirix Client - Lightweight Python client for Mirix AI server", + description="Intuit ECMS Client - Lightweight Python client for Intuit ECMS server", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/Mirix-AI/MIRIX", diff --git a/scripts/packaging/setup_server.py b/scripts/packaging/setup_server.py index 98e7e1c..dc20259 100644 --- a/scripts/packaging/setup_server.py +++ b/scripts/packaging/setup_server.py @@ -18,7 +18,8 @@ """ import os -from setuptools import setup, find_packages + +from setuptools import find_packages, setup # Read the contents of README file this_directory = os.path.abspath(os.path.dirname(__file__)) @@ -139,11 +140,11 @@ def get_version(): os.chdir(project_root) setup( - name="mirix-server", + name="intuit-ecms-server", version=get_version(), author="Mirix AI", author_email="yuwang@mirix.io", - description="Mirix Server - Multi-Agent Personal Assistant with Advanced Memory System", + description="Intuit ECMS Server - Multi-Agent Personal Assistant with Advanced Memory System", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/Mirix-AI/MIRIX", @@ -201,4 +202,3 @@ def get_version(): license="Apache License 2.0", zip_safe=False, ) - From cc4df6551b62ef9074ffd2f6adb822ae0741a6e7 Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Wed, 5 Nov 2025 13:59:26 -0800 Subject: [PATCH 3/6] chore: bump version --- mirix/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirix/__init__.py b/mirix/__init__.py index 271ca77..e4128c3 100755 --- a/mirix/__init__.py +++ b/mirix/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.1.5" +__version__ = "0.2.0" # import clients From 5a754093d988c45f8cd9b108f1a7d988eeb9f5d4 Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Wed, 5 Nov 2025 14:13:02 -0800 Subject: [PATCH 4/6] fix: fix packaging bugs --- intuit_ecms_client.egg-info/PKG-INFO | 295 +++++++++++++++ intuit_ecms_client.egg-info/SOURCES.txt | 92 +++++ .../dependency_links.txt | 1 + intuit_ecms_client.egg-info/not-zip-safe | 1 + intuit_ecms_client.egg-info/requires.txt | 15 + intuit_ecms_client.egg-info/top_level.txt | 1 + intuit_ecms_server.egg-info/PKG-INFO | 349 ++++++++++++++++++ intuit_ecms_server.egg-info/SOURCES.txt | 273 ++++++++++++++ .../dependency_links.txt | 1 + intuit_ecms_server.egg-info/entry_points.txt | 2 + intuit_ecms_server.egg-info/not-zip-safe | 1 + intuit_ecms_server.egg-info/requires.txt | 70 ++++ intuit_ecms_server.egg-info/top_level.txt | 1 + pyproject.toml | 2 +- scripts/packaging/build_packages.sh | 28 ++ 15 files changed, 1131 insertions(+), 1 deletion(-) create mode 100644 intuit_ecms_client.egg-info/PKG-INFO create mode 100644 intuit_ecms_client.egg-info/SOURCES.txt create mode 100644 intuit_ecms_client.egg-info/dependency_links.txt create mode 100644 intuit_ecms_client.egg-info/not-zip-safe create mode 100644 intuit_ecms_client.egg-info/requires.txt create mode 100644 intuit_ecms_client.egg-info/top_level.txt create mode 100644 intuit_ecms_server.egg-info/PKG-INFO create mode 100644 intuit_ecms_server.egg-info/SOURCES.txt create mode 100644 intuit_ecms_server.egg-info/dependency_links.txt create mode 100644 intuit_ecms_server.egg-info/entry_points.txt create mode 100644 intuit_ecms_server.egg-info/not-zip-safe create mode 100644 intuit_ecms_server.egg-info/requires.txt create mode 100644 intuit_ecms_server.egg-info/top_level.txt diff --git a/intuit_ecms_client.egg-info/PKG-INFO b/intuit_ecms_client.egg-info/PKG-INFO new file mode 100644 index 0000000..1313f51 --- /dev/null +++ b/intuit_ecms_client.egg-info/PKG-INFO @@ -0,0 +1,295 @@ +Metadata-Version: 2.4 +Name: intuit-ecms-client +Version: 0.2.0 +Summary: Intuit ECMS Client - Lightweight Python client for Intuit ECMS server +Home-page: https://github.com/Mirix-AI/MIRIX +Author: Mirix AI +Author-email: yuwang@mirix.io +License: Apache License 2.0 +Project-URL: Documentation, https://docs.mirix.io +Project-URL: Website, https://mirix.io +Project-URL: Source Code, https://github.com/Mirix-AI/MIRIX +Project-URL: Bug Reports, https://github.com/Mirix-AI/MIRIX/issues +Keywords: ai,memory,agent,llm,assistant,client,api +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Communications :: Chat +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: requests>=2.31.0 +Requires-Dist: pydantic>=2.0.0 +Requires-Dist: pydantic-settings>=2.0.0 +Requires-Dist: python-dotenv>=1.0.0 +Requires-Dist: httpx>=0.25.0 +Requires-Dist: rich<14.0.0,>=13.7.1 +Requires-Dist: pytz>=2024.1 +Provides-Extra: dev +Requires-Dist: pytest>=6.0.0; extra == "dev" +Requires-Dist: pytest-asyncio; extra == "dev" +Requires-Dist: black; extra == "dev" +Requires-Dist: isort; extra == "dev" +Requires-Dist: flake8; extra == "dev" +Requires-Dist: mypy; extra == "dev" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: keywords +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + +![Mirix Logo](https://github.com/RenKoya1/MIRIX/raw/main/assets/logo.png) + +## MIRIX - Multi-Agent Personal Assistant with an Advanced Memory System + +Your personal AI that builds memory through screen observation and natural conversation + +| 🌐 [Website](https://mirix.io) | 📚 [Documentation](https://docs.mirix.io) | 📄 [Paper](https://arxiv.org/abs/2507.07957) | 💬 [Discord](https://discord.gg/S6CeHNrJ) + + +--- + +### Key Features 🔥 + +- **Multi-Agent Memory System:** Six specialized memory components (Core, Episodic, Semantic, Procedural, Resource, Knowledge Vault) managed by dedicated agents +- **Screen Activity Tracking:** Continuous visual data capture and intelligent consolidation into structured memories +- **Privacy-First Design:** All long-term data stored locally with user-controlled privacy settings +- **Advanced Search:** PostgreSQL-native BM25 full-text search with vector similarity support +- **Multi-Modal Input:** Text, images, voice, and screen captures processed seamlessly + +### Quick Start +**End-Users**: For end-users who want to build your own memory using MIRIX, please checkout the quick installation guide [here](https://docs.mirix.io/getting-started/installation/#quick-installation-dmg). + +**Developers**: For users who want to apply our memory system as the backend, please check out our [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). Basically, you just need to run: +``` +git clone git@github.com:Mirix-AI/MIRIX.git +cd MIRIX + +# Create and activate virtual environment +python -m venv mirix_env +source mirix_env/bin/activate # On Windows: mirix_env\Scripts\activate + +pip install -r requirements.txt +``` +Then you can run the following python code: +```python +from mirix.agent import AgentWrapper + +# Initialize agent with configuration +agent = AgentWrapper("./mirix/configs/mirix.yaml") + +# Send basic text information +agent.send_message( + message="The moon now has a president.", + memorizing=True, + force_absorb_content=True +) +``` +For more details, please refer to [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). + +## Python SDK (NEW!) 🎉 + +We've created a simple [Python SDK](https://pypi.org/project/mirix/0.1.5/) that makes it incredibly easy to integrate Mirix's memory capabilities into your applications: + +### Installationhttps://pypi.org/project/mirix/0.1.5/ +```bash +pip install mirix +``` + +### Quick Start with SDK +```python +from mirix import Mirix + +# Initialize memory agent (defaults to Google Gemini 2.0 Flash) +memory_agent = Mirix(api_key="your-google-api-key") + +# Add memories +memory_agent.add("The moon now has a president") +memory_agent.add("John loves Italian food and is allergic to peanuts") + +# Chat with memory context +response = memory_agent.chat("Does the moon have a president?") +print(response) # "Yes, according to my memory, the moon has a president." + +response = memory_agent.chat("What does John like to eat?") +print(response) # "John loves Italian food. However, he's allergic to peanuts." +``` + +## Integration with Claude Agent SDK 🤝 + +Mirix can be integrated with [Anthropic's Claude Agent SDK](https://docs.claude.com/en/api/agent-sdk/python) to give Claude persistent memory across conversations. This allows Claude to remember context, user preferences, and past interactions. + +### Basic Setup + +Here's a simple example of integrating Mirix with the Claude Agent SDK: + +```python +#!/usr/bin/env python3 +import os +import asyncio +from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage +from mirix import Mirix +from collections import deque +from dotenv import load_dotenv +load_dotenv() + +# Configuration +MEMORY_UPDATE_INTERVAL = 3 # Update memory every N turns +REINIT_INTERVAL = 1 # Rebuild system prompt (retrieve from Mirix) every N turns +KEEP_LAST_N_TURNS = 50 # Keep last N turns in memory buffer + +def build_system_prompt(mirix_agent=None, user_id=None, conversation_buffer=""): + """Build system prompt with optional Mirix memory context""" + system_prompt = """You are a helpful assistant.""" + + # Add Mirix memory context if available + if mirix_agent and user_id and conversation_buffer: + memory_context = mirix_agent.extract_memory_for_system_prompt( + conversation_buffer, user_id + ) + if memory_context: + system_prompt += "\n\nRelevant Memory Context:\n" + memory_context + + return system_prompt + +async def run_agent(): + """Run Claude Agent SDK with Mirix memory integration""" + + # Initialize Mirix memory agent + mirix_agent = Mirix( + model_name="gemini-2.0-flash", + api_key=os.getenv("GEMINI_API_KEY"), + ) + user = mirix_agent.create_user(user_name="Alice") + + # Track conversation for memory updates + conversation_history = deque(maxlen=KEEP_LAST_N_TURNS) + turn_count = 0 + turns_since_reinit = 0 + session_id = None + + while True: + # Build system prompt with memory context + options = ClaudeAgentOptions( + resume=session_id, + allowed_tools=["Task", "Bash", "Read", "Edit", "Write", "WebSearch"], + system_prompt=build_system_prompt( + mirix_agent, user.id, + "\n".join([f"User: {u}\nAssistant: {a}" for u, a in conversation_history]) + ), + model="claude-sonnet-4-5", + max_turns=50 + ) + + user_input = input("User: ").strip() + if user_input.lower() in ['exit', 'quit', 'bye']: + break + + # Get Claude's response + assistant_response = "" + async for message in query(prompt=user_input, options=options): + if hasattr(message, 'subtype') and message.subtype == 'init': + session_id = message.data.get('session_id') + + if isinstance(message, AssistantMessage): + for block in message.content: + if hasattr(block, 'text'): + assistant_response += block.text + print(block.text, flush=True) + + # Update conversation history + conversation_history.append((user_input, assistant_response)) + turn_count += 1 + turns_since_reinit += 1 + + # Periodically update Mirix memory + if turn_count % MEMORY_UPDATE_INTERVAL == 0: + combined = "\n".join([ + f"[User] {u}\n[Assistant] {a}" + for u, a in conversation_history + ]) + await asyncio.to_thread(mirix_agent.add, combined, user_id=user.id) + print("✅ Memory updated!") + +if __name__ == "__main__": + asyncio.run(run_agent()) +``` + +### Key Benefits + +- **Persistent Memory:** Mirix helps Claude remember facts, preferences, and context across sessions +- **Intelligent Retrieval:** Mirix automatically retrieves relevant memories for each conversation +- **Scalable:** Works with conversations of any length without token limit issues +- **Flexible Updates:** Configure how often to update memory (e.g., every N turns) + +### Example Usage + +```bash +cd samples + +# Install dependencies +pip install mirix claude-agent-sdk python-dotenv + +# Set environment variables +export GEMINI_API_KEY="your-google-api-key" +export ANTHROPIC_API_KEY="your-anthropic-api-key" + +# Run the agent +python claude_agent.py +``` + +## License + +Mirix is released under the Apache License 2.0. See the [LICENSE](LICENSE) file for more details. + +## Contact + +For questions, suggestions, or issues, please open an issue on the GitHub repository or contact us at `yuwang@mirix.io` + +## Join Our Community + +Connect with other Mirix users, share your thoughts, and get support: + +### 💬 Discord Community +Join our Discord server for real-time discussions, support, and community updates: +**[https://discord.gg/S6CeHNrJ](https://discord.gg/S6CeHNrJ)** + +### 🎯 Weekly Discussion Sessions +We host weekly discussion sessions where you can: +- Discuss issues and bugs +- Share ideas about future directions +- Get general consultations and support +- Connect with the development team and community + +**📅 Schedule:** Friday nights, 8-9 PM PST +**🔗 Zoom Link:** [https://ucsd.zoom.us/j/96278791276](https://ucsd.zoom.us/j/96278791276) + +### 📱 WeChat Group +
+WeChat QR Code
+WeChat Group +
+ +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=Mirix-AI/MIRIX&type=Date)](https://star-history.com/#Mirix-AI/MIRIX.&Date) + +## Acknowledgement +We would like to thank [Letta](https://github.com/letta-ai/letta) for open-sourcing their framework, which served as the foundation for the memory system in this project. diff --git a/intuit_ecms_client.egg-info/SOURCES.txt b/intuit_ecms_client.egg-info/SOURCES.txt new file mode 100644 index 0000000..a89865b --- /dev/null +++ b/intuit_ecms_client.egg-info/SOURCES.txt @@ -0,0 +1,92 @@ +LICENSE +MANIFEST.in +README.md +setup.py +./mirix/client/__init__.py +./mirix/client/client.py +./mirix/client/remote_client.py +./mirix/helpers/__init__.py +./mirix/helpers/converters.py +./mirix/helpers/datetime_helpers.py +./mirix/helpers/json_helpers.py +./mirix/helpers/message_helpers.py +./mirix/helpers/tool_rule_solver.py +./mirix/schemas/__init__.py +./mirix/schemas/agent.py +./mirix/schemas/block.py +./mirix/schemas/cloud_file_mapping.py +./mirix/schemas/embedding_config.py +./mirix/schemas/enums.py +./mirix/schemas/environment_variables.py +./mirix/schemas/episodic_memory.py +./mirix/schemas/file.py +./mirix/schemas/health.py +./mirix/schemas/knowledge_vault.py +./mirix/schemas/llm_config.py +./mirix/schemas/memory.py +./mirix/schemas/message.py +./mirix/schemas/mirix_base.py +./mirix/schemas/mirix_message.py +./mirix/schemas/mirix_message_content.py +./mirix/schemas/mirix_request.py +./mirix/schemas/mirix_response.py +./mirix/schemas/organization.py +./mirix/schemas/procedural_memory.py +./mirix/schemas/providers.py +./mirix/schemas/resource_memory.py +./mirix/schemas/sandbox_config.py +./mirix/schemas/semantic_memory.py +./mirix/schemas/source.py +./mirix/schemas/step.py +./mirix/schemas/tool.py +./mirix/schemas/tool_rule.py +./mirix/schemas/usage.py +./mirix/schemas/user.py +./mirix/schemas/openai/__init__.py +./mirix/schemas/openai/chat_completion_request.py +./mirix/schemas/openai/chat_completion_response.py +./mirix/schemas/openai/chat_completions.py +./mirix/schemas/openai/embedding_response.py +./mirix/schemas/openai/openai.py +assets/icon.png +assets/logo.png +mirix/configs/mirix.yaml +mirix/configs/examples/mirix_azure.yaml +mirix/configs/examples/mirix_claude.yaml +mirix/configs/examples/mirix_gemini.yaml +mirix/configs/examples/mirix_openai.yaml +mirix/configs/legacy_configs/mirix.yaml +mirix/configs/legacy_configs/mirix_azure_example.yaml +mirix/configs/legacy_configs/mirix_custom_model.yaml +mirix/configs/legacy_configs/mirix_custom_prompts.yaml +mirix/configs/legacy_configs/mirix_gemini.yaml +mirix/configs/legacy_configs/mirix_gpt4.yaml +mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml +mirix/configs/legacy_configs/mirix_monitor.yaml +mirix/prompts/personas/chill_buddy.txt +mirix/prompts/personas/concise_analyst.txt +mirix/prompts/personas/friendly_conversationalist.txt +mirix/prompts/personas/helpful_assistant.txt +mirix/prompts/personas/playful_Ironist.txt +mirix/prompts/personas/project_manager.txt +mirix/prompts/system/base/background_agent.txt +mirix/prompts/system/base/chat_agent.txt +mirix/prompts/system/base/core_memory_agent.txt +mirix/prompts/system/base/episodic_memory_agent.txt +mirix/prompts/system/base/knowledge_vault_memory_agent.txt +mirix/prompts/system/base/meta_memory_agent.txt +mirix/prompts/system/base/procedural_memory_agent.txt +mirix/prompts/system/base/reflexion_agent.txt +mirix/prompts/system/base/resource_memory_agent.txt +mirix/prompts/system/base/semantic_memory_agent.txt +mirix/prompts/system/screen_monitor/background_agent.txt +mirix/prompts/system/screen_monitor/chat_agent.txt +mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt +mirix/prompts/system/screen_monitor/core_memory_agent.txt +mirix/prompts/system/screen_monitor/episodic_memory_agent.txt +mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt +mirix/prompts/system/screen_monitor/meta_memory_agent.txt +mirix/prompts/system/screen_monitor/procedural_memory_agent.txt +mirix/prompts/system/screen_monitor/reflexion_agent.txt +mirix/prompts/system/screen_monitor/resource_memory_agent.txt +mirix/prompts/system/screen_monitor/semantic_memory_agent.txt \ No newline at end of file diff --git a/intuit_ecms_client.egg-info/dependency_links.txt b/intuit_ecms_client.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/intuit_ecms_client.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/intuit_ecms_client.egg-info/not-zip-safe b/intuit_ecms_client.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/intuit_ecms_client.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/intuit_ecms_client.egg-info/requires.txt b/intuit_ecms_client.egg-info/requires.txt new file mode 100644 index 0000000..bfbb112 --- /dev/null +++ b/intuit_ecms_client.egg-info/requires.txt @@ -0,0 +1,15 @@ +requests>=2.31.0 +pydantic>=2.0.0 +pydantic-settings>=2.0.0 +python-dotenv>=1.0.0 +httpx>=0.25.0 +rich<14.0.0,>=13.7.1 +pytz>=2024.1 + +[dev] +pytest>=6.0.0 +pytest-asyncio +black +isort +flake8 +mypy diff --git a/intuit_ecms_client.egg-info/top_level.txt b/intuit_ecms_client.egg-info/top_level.txt new file mode 100644 index 0000000..a20b1e6 --- /dev/null +++ b/intuit_ecms_client.egg-info/top_level.txt @@ -0,0 +1 @@ +mirix diff --git a/intuit_ecms_server.egg-info/PKG-INFO b/intuit_ecms_server.egg-info/PKG-INFO new file mode 100644 index 0000000..9c95e6a --- /dev/null +++ b/intuit_ecms_server.egg-info/PKG-INFO @@ -0,0 +1,349 @@ +Metadata-Version: 2.4 +Name: intuit-ecms-server +Version: 0.2.0 +Summary: Intuit ECMS Server - Multi-Agent Personal Assistant with Advanced Memory System +Home-page: https://github.com/Mirix-AI/MIRIX +Author: Mirix AI +Author-email: yuwang@mirix.io +License: Apache License 2.0 +Project-URL: Documentation, https://docs.mirix.io +Project-URL: Website, https://mirix.io +Project-URL: Source Code, https://github.com/Mirix-AI/MIRIX +Project-URL: Bug Reports, https://github.com/Mirix-AI/MIRIX/issues +Keywords: ai,memory,agent,llm,assistant,chatbot,multimodal,server,fastapi +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Communications :: Chat +Classifier: Framework :: FastAPI +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: pytz>=2024.1 +Requires-Dist: numpy>=1.24.0 +Requires-Dist: pandas>=2.0.0 +Requires-Dist: openpyxl>=3.1.0 +Requires-Dist: Markdown>=3.5.0 +Requires-Dist: Pillow<11.0.0,>=10.2.0 +Requires-Dist: scikit-image>=0.22.0 +Requires-Dist: openai==1.72.0 +Requires-Dist: tiktoken>=0.5.0 +Requires-Dist: google-genai>=0.4.0 +Requires-Dist: anthropic>=0.23.0 +Requires-Dist: cohere>=4.0.0 +Requires-Dist: fastapi>=0.104.1 +Requires-Dist: uvicorn[standard]>=0.31.1 +Requires-Dist: python-multipart>=0.0.6 +Requires-Dist: httpx>=0.25.0 +Requires-Dist: httpx_sse>=0.3.0 +Requires-Dist: sqlalchemy>=2.0.0 +Requires-Dist: psycopg2-binary>=2.9.0 +Requires-Dist: pg8000>=1.30.0 +Requires-Dist: pgvector>=0.2.0 +Requires-Dist: redis>=5.0.0 +Requires-Dist: pydantic>=2.0.0 +Requires-Dist: pydantic-settings>=2.0.0 +Requires-Dist: python-dotenv>=1.0.0 +Requires-Dist: demjson3>=3.0.0 +Requires-Dist: pathvalidate>=3.0.0 +Requires-Dist: docstring_parser>=0.15 +Requires-Dist: jinja2>=3.1.0 +Requires-Dist: humps>=0.2.0 +Requires-Dist: colorama>=0.4.0 +Requires-Dist: rapidfuzz>=3.0.0 +Requires-Dist: rank-bm25>=0.2.0 +Requires-Dist: psutil>=5.9.0 +Requires-Dist: json_repair>=0.12.0 +Requires-Dist: rich<14.0.0,>=13.7.1 +Requires-Dist: anyio>=4.7.0 +Requires-Dist: pyyaml>=6.0.0 +Requires-Dist: requests>=2.31.0 +Requires-Dist: llama_index>=0.9.0 +Requires-Dist: llama-index-embeddings-google-genai>=0.1.0 +Requires-Dist: composio>=0.3.0 +Requires-Dist: mcp>=0.1.0 +Requires-Dist: google-auth>=2.0.0 +Requires-Dist: google-auth-oauthlib>=1.0.0 +Requires-Dist: google-auth-httplib2>=0.1.0 +Requires-Dist: google-api-python-client>=2.0.0 +Requires-Dist: opentelemetry-api>=1.20.0 +Requires-Dist: opentelemetry-sdk>=1.20.0 +Requires-Dist: opentelemetry-exporter-otlp>=1.20.0 +Requires-Dist: opentelemetry-instrumentation-requests>=0.41b0 +Provides-Extra: dev +Requires-Dist: pytest>=6.0.0; extra == "dev" +Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev" +Requires-Dist: pytest-cov>=4.0.0; extra == "dev" +Requires-Dist: black>=23.0.0; extra == "dev" +Requires-Dist: isort>=5.12.0; extra == "dev" +Requires-Dist: flake8>=6.0.0; extra == "dev" +Requires-Dist: mypy>=1.5.0; extra == "dev" +Requires-Dist: ruff>=0.1.0; extra == "dev" +Requires-Dist: pyright>=1.1.0; extra == "dev" +Provides-Extra: voice +Requires-Dist: SpeechRecognition>=3.10.0; extra == "voice" +Requires-Dist: pydub>=0.25.0; extra == "voice" +Provides-Extra: full +Requires-Dist: SpeechRecognition>=3.10.0; extra == "full" +Requires-Dist: pydub>=0.25.0; extra == "full" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: keywords +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + +![Mirix Logo](https://github.com/RenKoya1/MIRIX/raw/main/assets/logo.png) + +## MIRIX - Multi-Agent Personal Assistant with an Advanced Memory System + +Your personal AI that builds memory through screen observation and natural conversation + +| 🌐 [Website](https://mirix.io) | 📚 [Documentation](https://docs.mirix.io) | 📄 [Paper](https://arxiv.org/abs/2507.07957) | 💬 [Discord](https://discord.gg/S6CeHNrJ) + + +--- + +### Key Features 🔥 + +- **Multi-Agent Memory System:** Six specialized memory components (Core, Episodic, Semantic, Procedural, Resource, Knowledge Vault) managed by dedicated agents +- **Screen Activity Tracking:** Continuous visual data capture and intelligent consolidation into structured memories +- **Privacy-First Design:** All long-term data stored locally with user-controlled privacy settings +- **Advanced Search:** PostgreSQL-native BM25 full-text search with vector similarity support +- **Multi-Modal Input:** Text, images, voice, and screen captures processed seamlessly + +### Quick Start +**End-Users**: For end-users who want to build your own memory using MIRIX, please checkout the quick installation guide [here](https://docs.mirix.io/getting-started/installation/#quick-installation-dmg). + +**Developers**: For users who want to apply our memory system as the backend, please check out our [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). Basically, you just need to run: +``` +git clone git@github.com:Mirix-AI/MIRIX.git +cd MIRIX + +# Create and activate virtual environment +python -m venv mirix_env +source mirix_env/bin/activate # On Windows: mirix_env\Scripts\activate + +pip install -r requirements.txt +``` +Then you can run the following python code: +```python +from mirix.agent import AgentWrapper + +# Initialize agent with configuration +agent = AgentWrapper("./mirix/configs/mirix.yaml") + +# Send basic text information +agent.send_message( + message="The moon now has a president.", + memorizing=True, + force_absorb_content=True +) +``` +For more details, please refer to [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). + +## Python SDK (NEW!) 🎉 + +We've created a simple [Python SDK](https://pypi.org/project/mirix/0.1.5/) that makes it incredibly easy to integrate Mirix's memory capabilities into your applications: + +### Installationhttps://pypi.org/project/mirix/0.1.5/ +```bash +pip install mirix +``` + +### Quick Start with SDK +```python +from mirix import Mirix + +# Initialize memory agent (defaults to Google Gemini 2.0 Flash) +memory_agent = Mirix(api_key="your-google-api-key") + +# Add memories +memory_agent.add("The moon now has a president") +memory_agent.add("John loves Italian food and is allergic to peanuts") + +# Chat with memory context +response = memory_agent.chat("Does the moon have a president?") +print(response) # "Yes, according to my memory, the moon has a president." + +response = memory_agent.chat("What does John like to eat?") +print(response) # "John loves Italian food. However, he's allergic to peanuts." +``` + +## Integration with Claude Agent SDK 🤝 + +Mirix can be integrated with [Anthropic's Claude Agent SDK](https://docs.claude.com/en/api/agent-sdk/python) to give Claude persistent memory across conversations. This allows Claude to remember context, user preferences, and past interactions. + +### Basic Setup + +Here's a simple example of integrating Mirix with the Claude Agent SDK: + +```python +#!/usr/bin/env python3 +import os +import asyncio +from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage +from mirix import Mirix +from collections import deque +from dotenv import load_dotenv +load_dotenv() + +# Configuration +MEMORY_UPDATE_INTERVAL = 3 # Update memory every N turns +REINIT_INTERVAL = 1 # Rebuild system prompt (retrieve from Mirix) every N turns +KEEP_LAST_N_TURNS = 50 # Keep last N turns in memory buffer + +def build_system_prompt(mirix_agent=None, user_id=None, conversation_buffer=""): + """Build system prompt with optional Mirix memory context""" + system_prompt = """You are a helpful assistant.""" + + # Add Mirix memory context if available + if mirix_agent and user_id and conversation_buffer: + memory_context = mirix_agent.extract_memory_for_system_prompt( + conversation_buffer, user_id + ) + if memory_context: + system_prompt += "\n\nRelevant Memory Context:\n" + memory_context + + return system_prompt + +async def run_agent(): + """Run Claude Agent SDK with Mirix memory integration""" + + # Initialize Mirix memory agent + mirix_agent = Mirix( + model_name="gemini-2.0-flash", + api_key=os.getenv("GEMINI_API_KEY"), + ) + user = mirix_agent.create_user(user_name="Alice") + + # Track conversation for memory updates + conversation_history = deque(maxlen=KEEP_LAST_N_TURNS) + turn_count = 0 + turns_since_reinit = 0 + session_id = None + + while True: + # Build system prompt with memory context + options = ClaudeAgentOptions( + resume=session_id, + allowed_tools=["Task", "Bash", "Read", "Edit", "Write", "WebSearch"], + system_prompt=build_system_prompt( + mirix_agent, user.id, + "\n".join([f"User: {u}\nAssistant: {a}" for u, a in conversation_history]) + ), + model="claude-sonnet-4-5", + max_turns=50 + ) + + user_input = input("User: ").strip() + if user_input.lower() in ['exit', 'quit', 'bye']: + break + + # Get Claude's response + assistant_response = "" + async for message in query(prompt=user_input, options=options): + if hasattr(message, 'subtype') and message.subtype == 'init': + session_id = message.data.get('session_id') + + if isinstance(message, AssistantMessage): + for block in message.content: + if hasattr(block, 'text'): + assistant_response += block.text + print(block.text, flush=True) + + # Update conversation history + conversation_history.append((user_input, assistant_response)) + turn_count += 1 + turns_since_reinit += 1 + + # Periodically update Mirix memory + if turn_count % MEMORY_UPDATE_INTERVAL == 0: + combined = "\n".join([ + f"[User] {u}\n[Assistant] {a}" + for u, a in conversation_history + ]) + await asyncio.to_thread(mirix_agent.add, combined, user_id=user.id) + print("✅ Memory updated!") + +if __name__ == "__main__": + asyncio.run(run_agent()) +``` + +### Key Benefits + +- **Persistent Memory:** Mirix helps Claude remember facts, preferences, and context across sessions +- **Intelligent Retrieval:** Mirix automatically retrieves relevant memories for each conversation +- **Scalable:** Works with conversations of any length without token limit issues +- **Flexible Updates:** Configure how often to update memory (e.g., every N turns) + +### Example Usage + +```bash +cd samples + +# Install dependencies +pip install mirix claude-agent-sdk python-dotenv + +# Set environment variables +export GEMINI_API_KEY="your-google-api-key" +export ANTHROPIC_API_KEY="your-anthropic-api-key" + +# Run the agent +python claude_agent.py +``` + +## License + +Mirix is released under the Apache License 2.0. See the [LICENSE](LICENSE) file for more details. + +## Contact + +For questions, suggestions, or issues, please open an issue on the GitHub repository or contact us at `yuwang@mirix.io` + +## Join Our Community + +Connect with other Mirix users, share your thoughts, and get support: + +### 💬 Discord Community +Join our Discord server for real-time discussions, support, and community updates: +**[https://discord.gg/S6CeHNrJ](https://discord.gg/S6CeHNrJ)** + +### 🎯 Weekly Discussion Sessions +We host weekly discussion sessions where you can: +- Discuss issues and bugs +- Share ideas about future directions +- Get general consultations and support +- Connect with the development team and community + +**📅 Schedule:** Friday nights, 8-9 PM PST +**🔗 Zoom Link:** [https://ucsd.zoom.us/j/96278791276](https://ucsd.zoom.us/j/96278791276) + +### 📱 WeChat Group +
+WeChat QR Code
+WeChat Group +
+ +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=Mirix-AI/MIRIX&type=Date)](https://star-history.com/#Mirix-AI/MIRIX.&Date) + +## Acknowledgement +We would like to thank [Letta](https://github.com/letta-ai/letta) for open-sourcing their framework, which served as the foundation for the memory system in this project. diff --git a/intuit_ecms_server.egg-info/SOURCES.txt b/intuit_ecms_server.egg-info/SOURCES.txt new file mode 100644 index 0000000..b4ffb4b --- /dev/null +++ b/intuit_ecms_server.egg-info/SOURCES.txt @@ -0,0 +1,273 @@ +LICENSE +MANIFEST.in +README.md +setup.py +./mirix/__init__.py +./mirix/__main__.py +./mirix/config.py +./mirix/constants.py +./mirix/embeddings.py +./mirix/errors.py +./mirix/interface.py +./mirix/log.py +./mirix/memory.py +./mirix/sdk.py +./mirix/settings.py +./mirix/system.py +./mirix/tracing.py +./mirix/utils.py +./mirix/voice_utils.py +./mirix/agent/__init__.py +./mirix/agent/agent.py +./mirix/agent/agent_configs.py +./mirix/agent/agent_states.py +./mirix/agent/app_constants.py +./mirix/agent/app_utils.py +./mirix/agent/background_agent.py +./mirix/agent/core_memory_agent.py +./mirix/agent/episodic_memory_agent.py +./mirix/agent/knowledge_vault_memory_agent.py +./mirix/agent/message_queue.py +./mirix/agent/meta_agent.py +./mirix/agent/meta_memory_agent.py +./mirix/agent/procedural_memory_agent.py +./mirix/agent/reflexion_agent.py +./mirix/agent/resource_memory_agent.py +./mirix/agent/semantic_memory_agent.py +./mirix/agent/temporary_message_accumulator.py +./mirix/agent/upload_manager.py +./mirix/client/__init__.py +./mirix/client/client.py +./mirix/client/remote_client.py +./mirix/configs/__init__.py +./mirix/configs/mirix.yaml +./mirix/configs/examples/mirix_azure.yaml +./mirix/configs/examples/mirix_claude.yaml +./mirix/configs/examples/mirix_gemini.yaml +./mirix/configs/examples/mirix_openai.yaml +./mirix/configs/legacy_configs/mirix.yaml +./mirix/configs/legacy_configs/mirix_azure_example.yaml +./mirix/configs/legacy_configs/mirix_custom_model.yaml +./mirix/configs/legacy_configs/mirix_custom_prompts.yaml +./mirix/configs/legacy_configs/mirix_gemini.yaml +./mirix/configs/legacy_configs/mirix_gpt4.yaml +./mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml +./mirix/configs/legacy_configs/mirix_monitor.yaml +./mirix/database/__init__.py +./mirix/database/pglite_connector.py +./mirix/database/redis_client.py +./mirix/database/schema_extractor.py +./mirix/functions/__init__.py +./mirix/functions/ast_parsers.py +./mirix/functions/functions.py +./mirix/functions/helpers.py +./mirix/functions/schema_generator.py +./mirix/functions/function_sets/__init__.py +./mirix/functions/function_sets/base.py +./mirix/functions/function_sets/extras.py +./mirix/functions/function_sets/memory_tools.py +./mirix/functions/mcp_client/__init__.py +./mirix/functions/mcp_client/base_client.py +./mirix/functions/mcp_client/exceptions.py +./mirix/functions/mcp_client/gmail_client.py +./mirix/functions/mcp_client/manager.py +./mirix/functions/mcp_client/stdio_client.py +./mirix/functions/mcp_client/types.py +./mirix/helpers/__init__.py +./mirix/helpers/converters.py +./mirix/helpers/datetime_helpers.py +./mirix/helpers/json_helpers.py +./mirix/helpers/message_helpers.py +./mirix/helpers/tool_rule_solver.py +./mirix/llm_api/__init__.py +./mirix/llm_api/anthropic.py +./mirix/llm_api/anthropic_client.py +./mirix/llm_api/aws_bedrock.py +./mirix/llm_api/azure_openai.py +./mirix/llm_api/azure_openai_client.py +./mirix/llm_api/azure_openai_constants.py +./mirix/llm_api/cohere.py +./mirix/llm_api/cohere_client.py +./mirix/llm_api/google_ai.py +./mirix/llm_api/google_ai_client.py +./mirix/llm_api/helpers.py +./mirix/llm_api/llm_api_tools.py +./mirix/llm_api/llm_client.py +./mirix/llm_api/llm_client_base.py +./mirix/llm_api/mistral.py +./mirix/llm_api/openai.py +./mirix/llm_api/openai_client.py +./mirix/orm/__all__.py +./mirix/orm/__init__.py +./mirix/orm/agent.py +./mirix/orm/base.py +./mirix/orm/block.py +./mirix/orm/blocks_agents.py +./mirix/orm/cloud_file_mapping.py +./mirix/orm/custom_columns.py +./mirix/orm/enums.py +./mirix/orm/episodic_memory.py +./mirix/orm/errors.py +./mirix/orm/file.py +./mirix/orm/knowledge_vault.py +./mirix/orm/message.py +./mirix/orm/mixins.py +./mirix/orm/organization.py +./mirix/orm/procedural_memory.py +./mirix/orm/provider.py +./mirix/orm/resource_memory.py +./mirix/orm/semantic_memory.py +./mirix/orm/sqlalchemy_base.py +./mirix/orm/sqlite_functions.py +./mirix/orm/step.py +./mirix/orm/tool.py +./mirix/orm/tools_agents.py +./mirix/orm/user.py +./mirix/prompts/__init__.py +./mirix/prompts/gpt_persona.py +./mirix/prompts/gpt_summarize.py +./mirix/prompts/gpt_system.py +./mirix/prompts/personas/chill_buddy.txt +./mirix/prompts/personas/concise_analyst.txt +./mirix/prompts/personas/friendly_conversationalist.txt +./mirix/prompts/personas/helpful_assistant.txt +./mirix/prompts/personas/playful_Ironist.txt +./mirix/prompts/personas/project_manager.txt +./mirix/prompts/system/base/background_agent.txt +./mirix/prompts/system/base/chat_agent.txt +./mirix/prompts/system/base/core_memory_agent.txt +./mirix/prompts/system/base/episodic_memory_agent.txt +./mirix/prompts/system/base/knowledge_vault_memory_agent.txt +./mirix/prompts/system/base/meta_memory_agent.txt +./mirix/prompts/system/base/procedural_memory_agent.txt +./mirix/prompts/system/base/reflexion_agent.txt +./mirix/prompts/system/base/resource_memory_agent.txt +./mirix/prompts/system/base/semantic_memory_agent.txt +./mirix/prompts/system/screen_monitor/background_agent.txt +./mirix/prompts/system/screen_monitor/chat_agent.txt +./mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt +./mirix/prompts/system/screen_monitor/core_memory_agent.txt +./mirix/prompts/system/screen_monitor/episodic_memory_agent.txt +./mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt +./mirix/prompts/system/screen_monitor/meta_memory_agent.txt +./mirix/prompts/system/screen_monitor/procedural_memory_agent.txt +./mirix/prompts/system/screen_monitor/reflexion_agent.txt +./mirix/prompts/system/screen_monitor/resource_memory_agent.txt +./mirix/prompts/system/screen_monitor/semantic_memory_agent.txt +./mirix/queue/__init__.py +./mirix/queue/config.py +./mirix/queue/kafka_queue.py +./mirix/queue/manager.py +./mirix/queue/memory_queue.py +./mirix/queue/message_pb2.py +./mirix/queue/queue_interface.py +./mirix/queue/queue_util.py +./mirix/queue/worker.py +./mirix/schemas/__init__.py +./mirix/schemas/agent.py +./mirix/schemas/block.py +./mirix/schemas/cloud_file_mapping.py +./mirix/schemas/embedding_config.py +./mirix/schemas/enums.py +./mirix/schemas/environment_variables.py +./mirix/schemas/episodic_memory.py +./mirix/schemas/file.py +./mirix/schemas/health.py +./mirix/schemas/knowledge_vault.py +./mirix/schemas/llm_config.py +./mirix/schemas/memory.py +./mirix/schemas/message.py +./mirix/schemas/mirix_base.py +./mirix/schemas/mirix_message.py +./mirix/schemas/mirix_message_content.py +./mirix/schemas/mirix_request.py +./mirix/schemas/mirix_response.py +./mirix/schemas/organization.py +./mirix/schemas/procedural_memory.py +./mirix/schemas/providers.py +./mirix/schemas/resource_memory.py +./mirix/schemas/sandbox_config.py +./mirix/schemas/semantic_memory.py +./mirix/schemas/source.py +./mirix/schemas/step.py +./mirix/schemas/tool.py +./mirix/schemas/tool_rule.py +./mirix/schemas/usage.py +./mirix/schemas/user.py +./mirix/schemas/openai/__init__.py +./mirix/schemas/openai/chat_completion_request.py +./mirix/schemas/openai/chat_completion_response.py +./mirix/schemas/openai/chat_completions.py +./mirix/schemas/openai/embedding_response.py +./mirix/schemas/openai/openai.py +./mirix/server/__init__.py +./mirix/server/constants.py +./mirix/server/rest_api.py +./mirix/server/server.py +./mirix/server/startup.sh +./mirix/server/utils.py +./mirix/services/__init__.py +./mirix/services/agent_manager.py +./mirix/services/block_manager.py +./mirix/services/cloud_file_mapping_manager.py +./mirix/services/episodic_memory_manager.py +./mirix/services/file_manager.py +./mirix/services/knowledge_vault_manager.py +./mirix/services/mcp_marketplace.py +./mirix/services/mcp_tool_registry.py +./mirix/services/message_manager.py +./mirix/services/organization_manager.py +./mirix/services/per_agent_lock_manager.py +./mirix/services/procedural_memory_manager.py +./mirix/services/provider_manager.py +./mirix/services/resource_memory_manager.py +./mirix/services/semantic_memory_manager.py +./mirix/services/step_manager.py +./mirix/services/tool_execution_sandbox.py +./mirix/services/tool_manager.py +./mirix/services/user_manager.py +./mirix/services/utils.py +./mirix/services/helpers/__init__.py +./mirix/services/helpers/agent_manager_helper.py +assets/icon.png +assets/logo.png +mirix/configs/mirix.yaml +mirix/configs/examples/mirix_azure.yaml +mirix/configs/examples/mirix_claude.yaml +mirix/configs/examples/mirix_gemini.yaml +mirix/configs/examples/mirix_openai.yaml +mirix/configs/legacy_configs/mirix.yaml +mirix/configs/legacy_configs/mirix_azure_example.yaml +mirix/configs/legacy_configs/mirix_custom_model.yaml +mirix/configs/legacy_configs/mirix_custom_prompts.yaml +mirix/configs/legacy_configs/mirix_gemini.yaml +mirix/configs/legacy_configs/mirix_gpt4.yaml +mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml +mirix/configs/legacy_configs/mirix_monitor.yaml +mirix/prompts/personas/chill_buddy.txt +mirix/prompts/personas/concise_analyst.txt +mirix/prompts/personas/friendly_conversationalist.txt +mirix/prompts/personas/helpful_assistant.txt +mirix/prompts/personas/playful_Ironist.txt +mirix/prompts/personas/project_manager.txt +mirix/prompts/system/base/background_agent.txt +mirix/prompts/system/base/chat_agent.txt +mirix/prompts/system/base/core_memory_agent.txt +mirix/prompts/system/base/episodic_memory_agent.txt +mirix/prompts/system/base/knowledge_vault_memory_agent.txt +mirix/prompts/system/base/meta_memory_agent.txt +mirix/prompts/system/base/procedural_memory_agent.txt +mirix/prompts/system/base/reflexion_agent.txt +mirix/prompts/system/base/resource_memory_agent.txt +mirix/prompts/system/base/semantic_memory_agent.txt +mirix/prompts/system/screen_monitor/background_agent.txt +mirix/prompts/system/screen_monitor/chat_agent.txt +mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt +mirix/prompts/system/screen_monitor/core_memory_agent.txt +mirix/prompts/system/screen_monitor/episodic_memory_agent.txt +mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt +mirix/prompts/system/screen_monitor/meta_memory_agent.txt +mirix/prompts/system/screen_monitor/procedural_memory_agent.txt +mirix/prompts/system/screen_monitor/reflexion_agent.txt +mirix/prompts/system/screen_monitor/resource_memory_agent.txt +mirix/prompts/system/screen_monitor/semantic_memory_agent.txt \ No newline at end of file diff --git a/intuit_ecms_server.egg-info/dependency_links.txt b/intuit_ecms_server.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/intuit_ecms_server.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/intuit_ecms_server.egg-info/entry_points.txt b/intuit_ecms_server.egg-info/entry_points.txt new file mode 100644 index 0000000..ace4c51 --- /dev/null +++ b/intuit_ecms_server.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +mirix-server = mirix.server.rest_api:main diff --git a/intuit_ecms_server.egg-info/not-zip-safe b/intuit_ecms_server.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/intuit_ecms_server.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/intuit_ecms_server.egg-info/requires.txt b/intuit_ecms_server.egg-info/requires.txt new file mode 100644 index 0000000..dac99f0 --- /dev/null +++ b/intuit_ecms_server.egg-info/requires.txt @@ -0,0 +1,70 @@ +pytz>=2024.1 +numpy>=1.24.0 +pandas>=2.0.0 +openpyxl>=3.1.0 +Markdown>=3.5.0 +Pillow<11.0.0,>=10.2.0 +scikit-image>=0.22.0 +openai==1.72.0 +tiktoken>=0.5.0 +google-genai>=0.4.0 +anthropic>=0.23.0 +cohere>=4.0.0 +fastapi>=0.104.1 +uvicorn[standard]>=0.31.1 +python-multipart>=0.0.6 +httpx>=0.25.0 +httpx_sse>=0.3.0 +sqlalchemy>=2.0.0 +psycopg2-binary>=2.9.0 +pg8000>=1.30.0 +pgvector>=0.2.0 +redis>=5.0.0 +pydantic>=2.0.0 +pydantic-settings>=2.0.0 +python-dotenv>=1.0.0 +demjson3>=3.0.0 +pathvalidate>=3.0.0 +docstring_parser>=0.15 +jinja2>=3.1.0 +humps>=0.2.0 +colorama>=0.4.0 +rapidfuzz>=3.0.0 +rank-bm25>=0.2.0 +psutil>=5.9.0 +json_repair>=0.12.0 +rich<14.0.0,>=13.7.1 +anyio>=4.7.0 +pyyaml>=6.0.0 +requests>=2.31.0 +llama_index>=0.9.0 +llama-index-embeddings-google-genai>=0.1.0 +composio>=0.3.0 +mcp>=0.1.0 +google-auth>=2.0.0 +google-auth-oauthlib>=1.0.0 +google-auth-httplib2>=0.1.0 +google-api-python-client>=2.0.0 +opentelemetry-api>=1.20.0 +opentelemetry-sdk>=1.20.0 +opentelemetry-exporter-otlp>=1.20.0 +opentelemetry-instrumentation-requests>=0.41b0 + +[dev] +pytest>=6.0.0 +pytest-asyncio>=0.21.0 +pytest-cov>=4.0.0 +black>=23.0.0 +isort>=5.12.0 +flake8>=6.0.0 +mypy>=1.5.0 +ruff>=0.1.0 +pyright>=1.1.0 + +[full] +SpeechRecognition>=3.10.0 +pydub>=0.25.0 + +[voice] +SpeechRecognition>=3.10.0 +pydub>=0.25.0 diff --git a/intuit_ecms_server.egg-info/top_level.txt b/intuit_ecms_server.egg-info/top_level.txt new file mode 100644 index 0000000..a20b1e6 --- /dev/null +++ b/intuit_ecms_server.egg-info/top_level.txt @@ -0,0 +1 @@ +mirix diff --git a/pyproject.toml b/pyproject.toml index 852d141..a46bce9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mirix" -version = "0.1.5" +version = "0.2.0" description = "Multi-Agent Personal Assistant with an Advanced Memory System" readme = "README.md" license = {text = "Apache License 2.0"} diff --git a/scripts/packaging/build_packages.sh b/scripts/packaging/build_packages.sh index e53f01e..ee8f334 100755 --- a/scripts/packaging/build_packages.sh +++ b/scripts/packaging/build_packages.sh @@ -9,6 +9,17 @@ BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # No Color +# Function to restore pyproject.toml on exit +restore_pyproject() { + if [ -f "pyproject.toml.backup" ]; then + echo -e "${BLUE}Restoring pyproject.toml...${NC}" + mv pyproject.toml.backup pyproject.toml + fi +} + +# Set trap to restore pyproject.toml on exit (success or failure) +trap restore_pyproject EXIT + echo -e "${BLUE}=================================================${NC}" echo -e "${BLUE} Mirix Package Build Script${NC}" echo -e "${BLUE}=================================================${NC}" @@ -33,6 +44,16 @@ rm -rf intuit_ecms_server.egg-info echo -e "${GREEN}✓ Cleaned${NC}" echo "" +# Temporarily rename pyproject.toml to prevent it from overriding setup scripts +echo -e "${BLUE}[1.5/5] Temporarily moving pyproject.toml...${NC}" +if [ -f "pyproject.toml" ]; then + mv pyproject.toml pyproject.toml.backup + echo -e "${GREEN}✓ Moved pyproject.toml${NC}" +else + echo -e "${BLUE} pyproject.toml already moved${NC}" +fi +echo "" + # Install build dependencies echo -e "${BLUE}[2/5] Installing build dependencies...${NC}" pip install --upgrade setuptools wheel twine @@ -91,3 +112,10 @@ echo "To test packages:" echo -e " ${BLUE}twine check dist/*${NC}" echo "" +# Restore pyproject.toml +if [ -f "pyproject.toml.backup" ]; then + mv pyproject.toml.backup pyproject.toml + echo -e "${GREEN}✓ Restored pyproject.toml${NC}" + echo "" +fi + From a8a545428bcfa80d723b4cd2dcee1c82b29005b5 Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Thu, 6 Nov 2025 10:56:59 -0800 Subject: [PATCH 5/6] feat: new package --- .gitignore | 1 + intuit_ecms_client.egg-info/PKG-INFO | 295 --------------- intuit_ecms_client.egg-info/SOURCES.txt | 92 ----- .../dependency_links.txt | 1 - intuit_ecms_client.egg-info/not-zip-safe | 1 - intuit_ecms_client.egg-info/requires.txt | 15 - intuit_ecms_client.egg-info/top_level.txt | 1 - intuit_ecms_server.egg-info/PKG-INFO | 349 ------------------ intuit_ecms_server.egg-info/SOURCES.txt | 273 -------------- .../dependency_links.txt | 1 - intuit_ecms_server.egg-info/entry_points.txt | 2 - intuit_ecms_server.egg-info/not-zip-safe | 1 - intuit_ecms_server.egg-info/requires.txt | 70 ---- intuit_ecms_server.egg-info/top_level.txt | 1 - scripts/packaging/build_packages.sh | 10 +- scripts/packaging/setup_client.py | 6 +- scripts/packaging/setup_server.py | 4 +- 17 files changed, 12 insertions(+), 1111 deletions(-) delete mode 100644 intuit_ecms_client.egg-info/PKG-INFO delete mode 100644 intuit_ecms_client.egg-info/SOURCES.txt delete mode 100644 intuit_ecms_client.egg-info/dependency_links.txt delete mode 100644 intuit_ecms_client.egg-info/not-zip-safe delete mode 100644 intuit_ecms_client.egg-info/requires.txt delete mode 100644 intuit_ecms_client.egg-info/top_level.txt delete mode 100644 intuit_ecms_server.egg-info/PKG-INFO delete mode 100644 intuit_ecms_server.egg-info/SOURCES.txt delete mode 100644 intuit_ecms_server.egg-info/dependency_links.txt delete mode 100644 intuit_ecms_server.egg-info/entry_points.txt delete mode 100644 intuit_ecms_server.egg-info/not-zip-safe delete mode 100644 intuit_ecms_server.egg-info/requires.txt delete mode 100644 intuit_ecms_server.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index fb6db00..cdb2626 100755 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ frontend/dist frontend/backend dist/ build/ +*.egg-info/ .env.* .DS_Store npm-debug.log* diff --git a/intuit_ecms_client.egg-info/PKG-INFO b/intuit_ecms_client.egg-info/PKG-INFO deleted file mode 100644 index 1313f51..0000000 --- a/intuit_ecms_client.egg-info/PKG-INFO +++ /dev/null @@ -1,295 +0,0 @@ -Metadata-Version: 2.4 -Name: intuit-ecms-client -Version: 0.2.0 -Summary: Intuit ECMS Client - Lightweight Python client for Intuit ECMS server -Home-page: https://github.com/Mirix-AI/MIRIX -Author: Mirix AI -Author-email: yuwang@mirix.io -License: Apache License 2.0 -Project-URL: Documentation, https://docs.mirix.io -Project-URL: Website, https://mirix.io -Project-URL: Source Code, https://github.com/Mirix-AI/MIRIX -Project-URL: Bug Reports, https://github.com/Mirix-AI/MIRIX/issues -Keywords: ai,memory,agent,llm,assistant,client,api -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Communications :: Chat -Requires-Python: >=3.10 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: requests>=2.31.0 -Requires-Dist: pydantic>=2.0.0 -Requires-Dist: pydantic-settings>=2.0.0 -Requires-Dist: python-dotenv>=1.0.0 -Requires-Dist: httpx>=0.25.0 -Requires-Dist: rich<14.0.0,>=13.7.1 -Requires-Dist: pytz>=2024.1 -Provides-Extra: dev -Requires-Dist: pytest>=6.0.0; extra == "dev" -Requires-Dist: pytest-asyncio; extra == "dev" -Requires-Dist: black; extra == "dev" -Requires-Dist: isort; extra == "dev" -Requires-Dist: flake8; extra == "dev" -Requires-Dist: mypy; extra == "dev" -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: home-page -Dynamic: keywords -Dynamic: license -Dynamic: license-file -Dynamic: project-url -Dynamic: provides-extra -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary - -![Mirix Logo](https://github.com/RenKoya1/MIRIX/raw/main/assets/logo.png) - -## MIRIX - Multi-Agent Personal Assistant with an Advanced Memory System - -Your personal AI that builds memory through screen observation and natural conversation - -| 🌐 [Website](https://mirix.io) | 📚 [Documentation](https://docs.mirix.io) | 📄 [Paper](https://arxiv.org/abs/2507.07957) | 💬 [Discord](https://discord.gg/S6CeHNrJ) - - ---- - -### Key Features 🔥 - -- **Multi-Agent Memory System:** Six specialized memory components (Core, Episodic, Semantic, Procedural, Resource, Knowledge Vault) managed by dedicated agents -- **Screen Activity Tracking:** Continuous visual data capture and intelligent consolidation into structured memories -- **Privacy-First Design:** All long-term data stored locally with user-controlled privacy settings -- **Advanced Search:** PostgreSQL-native BM25 full-text search with vector similarity support -- **Multi-Modal Input:** Text, images, voice, and screen captures processed seamlessly - -### Quick Start -**End-Users**: For end-users who want to build your own memory using MIRIX, please checkout the quick installation guide [here](https://docs.mirix.io/getting-started/installation/#quick-installation-dmg). - -**Developers**: For users who want to apply our memory system as the backend, please check out our [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). Basically, you just need to run: -``` -git clone git@github.com:Mirix-AI/MIRIX.git -cd MIRIX - -# Create and activate virtual environment -python -m venv mirix_env -source mirix_env/bin/activate # On Windows: mirix_env\Scripts\activate - -pip install -r requirements.txt -``` -Then you can run the following python code: -```python -from mirix.agent import AgentWrapper - -# Initialize agent with configuration -agent = AgentWrapper("./mirix/configs/mirix.yaml") - -# Send basic text information -agent.send_message( - message="The moon now has a president.", - memorizing=True, - force_absorb_content=True -) -``` -For more details, please refer to [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). - -## Python SDK (NEW!) 🎉 - -We've created a simple [Python SDK](https://pypi.org/project/mirix/0.1.5/) that makes it incredibly easy to integrate Mirix's memory capabilities into your applications: - -### Installationhttps://pypi.org/project/mirix/0.1.5/ -```bash -pip install mirix -``` - -### Quick Start with SDK -```python -from mirix import Mirix - -# Initialize memory agent (defaults to Google Gemini 2.0 Flash) -memory_agent = Mirix(api_key="your-google-api-key") - -# Add memories -memory_agent.add("The moon now has a president") -memory_agent.add("John loves Italian food and is allergic to peanuts") - -# Chat with memory context -response = memory_agent.chat("Does the moon have a president?") -print(response) # "Yes, according to my memory, the moon has a president." - -response = memory_agent.chat("What does John like to eat?") -print(response) # "John loves Italian food. However, he's allergic to peanuts." -``` - -## Integration with Claude Agent SDK 🤝 - -Mirix can be integrated with [Anthropic's Claude Agent SDK](https://docs.claude.com/en/api/agent-sdk/python) to give Claude persistent memory across conversations. This allows Claude to remember context, user preferences, and past interactions. - -### Basic Setup - -Here's a simple example of integrating Mirix with the Claude Agent SDK: - -```python -#!/usr/bin/env python3 -import os -import asyncio -from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage -from mirix import Mirix -from collections import deque -from dotenv import load_dotenv -load_dotenv() - -# Configuration -MEMORY_UPDATE_INTERVAL = 3 # Update memory every N turns -REINIT_INTERVAL = 1 # Rebuild system prompt (retrieve from Mirix) every N turns -KEEP_LAST_N_TURNS = 50 # Keep last N turns in memory buffer - -def build_system_prompt(mirix_agent=None, user_id=None, conversation_buffer=""): - """Build system prompt with optional Mirix memory context""" - system_prompt = """You are a helpful assistant.""" - - # Add Mirix memory context if available - if mirix_agent and user_id and conversation_buffer: - memory_context = mirix_agent.extract_memory_for_system_prompt( - conversation_buffer, user_id - ) - if memory_context: - system_prompt += "\n\nRelevant Memory Context:\n" + memory_context - - return system_prompt - -async def run_agent(): - """Run Claude Agent SDK with Mirix memory integration""" - - # Initialize Mirix memory agent - mirix_agent = Mirix( - model_name="gemini-2.0-flash", - api_key=os.getenv("GEMINI_API_KEY"), - ) - user = mirix_agent.create_user(user_name="Alice") - - # Track conversation for memory updates - conversation_history = deque(maxlen=KEEP_LAST_N_TURNS) - turn_count = 0 - turns_since_reinit = 0 - session_id = None - - while True: - # Build system prompt with memory context - options = ClaudeAgentOptions( - resume=session_id, - allowed_tools=["Task", "Bash", "Read", "Edit", "Write", "WebSearch"], - system_prompt=build_system_prompt( - mirix_agent, user.id, - "\n".join([f"User: {u}\nAssistant: {a}" for u, a in conversation_history]) - ), - model="claude-sonnet-4-5", - max_turns=50 - ) - - user_input = input("User: ").strip() - if user_input.lower() in ['exit', 'quit', 'bye']: - break - - # Get Claude's response - assistant_response = "" - async for message in query(prompt=user_input, options=options): - if hasattr(message, 'subtype') and message.subtype == 'init': - session_id = message.data.get('session_id') - - if isinstance(message, AssistantMessage): - for block in message.content: - if hasattr(block, 'text'): - assistant_response += block.text - print(block.text, flush=True) - - # Update conversation history - conversation_history.append((user_input, assistant_response)) - turn_count += 1 - turns_since_reinit += 1 - - # Periodically update Mirix memory - if turn_count % MEMORY_UPDATE_INTERVAL == 0: - combined = "\n".join([ - f"[User] {u}\n[Assistant] {a}" - for u, a in conversation_history - ]) - await asyncio.to_thread(mirix_agent.add, combined, user_id=user.id) - print("✅ Memory updated!") - -if __name__ == "__main__": - asyncio.run(run_agent()) -``` - -### Key Benefits - -- **Persistent Memory:** Mirix helps Claude remember facts, preferences, and context across sessions -- **Intelligent Retrieval:** Mirix automatically retrieves relevant memories for each conversation -- **Scalable:** Works with conversations of any length without token limit issues -- **Flexible Updates:** Configure how often to update memory (e.g., every N turns) - -### Example Usage - -```bash -cd samples - -# Install dependencies -pip install mirix claude-agent-sdk python-dotenv - -# Set environment variables -export GEMINI_API_KEY="your-google-api-key" -export ANTHROPIC_API_KEY="your-anthropic-api-key" - -# Run the agent -python claude_agent.py -``` - -## License - -Mirix is released under the Apache License 2.0. See the [LICENSE](LICENSE) file for more details. - -## Contact - -For questions, suggestions, or issues, please open an issue on the GitHub repository or contact us at `yuwang@mirix.io` - -## Join Our Community - -Connect with other Mirix users, share your thoughts, and get support: - -### 💬 Discord Community -Join our Discord server for real-time discussions, support, and community updates: -**[https://discord.gg/S6CeHNrJ](https://discord.gg/S6CeHNrJ)** - -### 🎯 Weekly Discussion Sessions -We host weekly discussion sessions where you can: -- Discuss issues and bugs -- Share ideas about future directions -- Get general consultations and support -- Connect with the development team and community - -**📅 Schedule:** Friday nights, 8-9 PM PST -**🔗 Zoom Link:** [https://ucsd.zoom.us/j/96278791276](https://ucsd.zoom.us/j/96278791276) - -### 📱 WeChat Group -
-WeChat QR Code
-WeChat Group -
- -## Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=Mirix-AI/MIRIX&type=Date)](https://star-history.com/#Mirix-AI/MIRIX.&Date) - -## Acknowledgement -We would like to thank [Letta](https://github.com/letta-ai/letta) for open-sourcing their framework, which served as the foundation for the memory system in this project. diff --git a/intuit_ecms_client.egg-info/SOURCES.txt b/intuit_ecms_client.egg-info/SOURCES.txt deleted file mode 100644 index a89865b..0000000 --- a/intuit_ecms_client.egg-info/SOURCES.txt +++ /dev/null @@ -1,92 +0,0 @@ -LICENSE -MANIFEST.in -README.md -setup.py -./mirix/client/__init__.py -./mirix/client/client.py -./mirix/client/remote_client.py -./mirix/helpers/__init__.py -./mirix/helpers/converters.py -./mirix/helpers/datetime_helpers.py -./mirix/helpers/json_helpers.py -./mirix/helpers/message_helpers.py -./mirix/helpers/tool_rule_solver.py -./mirix/schemas/__init__.py -./mirix/schemas/agent.py -./mirix/schemas/block.py -./mirix/schemas/cloud_file_mapping.py -./mirix/schemas/embedding_config.py -./mirix/schemas/enums.py -./mirix/schemas/environment_variables.py -./mirix/schemas/episodic_memory.py -./mirix/schemas/file.py -./mirix/schemas/health.py -./mirix/schemas/knowledge_vault.py -./mirix/schemas/llm_config.py -./mirix/schemas/memory.py -./mirix/schemas/message.py -./mirix/schemas/mirix_base.py -./mirix/schemas/mirix_message.py -./mirix/schemas/mirix_message_content.py -./mirix/schemas/mirix_request.py -./mirix/schemas/mirix_response.py -./mirix/schemas/organization.py -./mirix/schemas/procedural_memory.py -./mirix/schemas/providers.py -./mirix/schemas/resource_memory.py -./mirix/schemas/sandbox_config.py -./mirix/schemas/semantic_memory.py -./mirix/schemas/source.py -./mirix/schemas/step.py -./mirix/schemas/tool.py -./mirix/schemas/tool_rule.py -./mirix/schemas/usage.py -./mirix/schemas/user.py -./mirix/schemas/openai/__init__.py -./mirix/schemas/openai/chat_completion_request.py -./mirix/schemas/openai/chat_completion_response.py -./mirix/schemas/openai/chat_completions.py -./mirix/schemas/openai/embedding_response.py -./mirix/schemas/openai/openai.py -assets/icon.png -assets/logo.png -mirix/configs/mirix.yaml -mirix/configs/examples/mirix_azure.yaml -mirix/configs/examples/mirix_claude.yaml -mirix/configs/examples/mirix_gemini.yaml -mirix/configs/examples/mirix_openai.yaml -mirix/configs/legacy_configs/mirix.yaml -mirix/configs/legacy_configs/mirix_azure_example.yaml -mirix/configs/legacy_configs/mirix_custom_model.yaml -mirix/configs/legacy_configs/mirix_custom_prompts.yaml -mirix/configs/legacy_configs/mirix_gemini.yaml -mirix/configs/legacy_configs/mirix_gpt4.yaml -mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml -mirix/configs/legacy_configs/mirix_monitor.yaml -mirix/prompts/personas/chill_buddy.txt -mirix/prompts/personas/concise_analyst.txt -mirix/prompts/personas/friendly_conversationalist.txt -mirix/prompts/personas/helpful_assistant.txt -mirix/prompts/personas/playful_Ironist.txt -mirix/prompts/personas/project_manager.txt -mirix/prompts/system/base/background_agent.txt -mirix/prompts/system/base/chat_agent.txt -mirix/prompts/system/base/core_memory_agent.txt -mirix/prompts/system/base/episodic_memory_agent.txt -mirix/prompts/system/base/knowledge_vault_memory_agent.txt -mirix/prompts/system/base/meta_memory_agent.txt -mirix/prompts/system/base/procedural_memory_agent.txt -mirix/prompts/system/base/reflexion_agent.txt -mirix/prompts/system/base/resource_memory_agent.txt -mirix/prompts/system/base/semantic_memory_agent.txt -mirix/prompts/system/screen_monitor/background_agent.txt -mirix/prompts/system/screen_monitor/chat_agent.txt -mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt -mirix/prompts/system/screen_monitor/core_memory_agent.txt -mirix/prompts/system/screen_monitor/episodic_memory_agent.txt -mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt -mirix/prompts/system/screen_monitor/meta_memory_agent.txt -mirix/prompts/system/screen_monitor/procedural_memory_agent.txt -mirix/prompts/system/screen_monitor/reflexion_agent.txt -mirix/prompts/system/screen_monitor/resource_memory_agent.txt -mirix/prompts/system/screen_monitor/semantic_memory_agent.txt \ No newline at end of file diff --git a/intuit_ecms_client.egg-info/dependency_links.txt b/intuit_ecms_client.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/intuit_ecms_client.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/intuit_ecms_client.egg-info/not-zip-safe b/intuit_ecms_client.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/intuit_ecms_client.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/intuit_ecms_client.egg-info/requires.txt b/intuit_ecms_client.egg-info/requires.txt deleted file mode 100644 index bfbb112..0000000 --- a/intuit_ecms_client.egg-info/requires.txt +++ /dev/null @@ -1,15 +0,0 @@ -requests>=2.31.0 -pydantic>=2.0.0 -pydantic-settings>=2.0.0 -python-dotenv>=1.0.0 -httpx>=0.25.0 -rich<14.0.0,>=13.7.1 -pytz>=2024.1 - -[dev] -pytest>=6.0.0 -pytest-asyncio -black -isort -flake8 -mypy diff --git a/intuit_ecms_client.egg-info/top_level.txt b/intuit_ecms_client.egg-info/top_level.txt deleted file mode 100644 index a20b1e6..0000000 --- a/intuit_ecms_client.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -mirix diff --git a/intuit_ecms_server.egg-info/PKG-INFO b/intuit_ecms_server.egg-info/PKG-INFO deleted file mode 100644 index 9c95e6a..0000000 --- a/intuit_ecms_server.egg-info/PKG-INFO +++ /dev/null @@ -1,349 +0,0 @@ -Metadata-Version: 2.4 -Name: intuit-ecms-server -Version: 0.2.0 -Summary: Intuit ECMS Server - Multi-Agent Personal Assistant with Advanced Memory System -Home-page: https://github.com/Mirix-AI/MIRIX -Author: Mirix AI -Author-email: yuwang@mirix.io -License: Apache License 2.0 -Project-URL: Documentation, https://docs.mirix.io -Project-URL: Website, https://mirix.io -Project-URL: Source Code, https://github.com/Mirix-AI/MIRIX -Project-URL: Bug Reports, https://github.com/Mirix-AI/MIRIX/issues -Keywords: ai,memory,agent,llm,assistant,chatbot,multimodal,server,fastapi -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Communications :: Chat -Classifier: Framework :: FastAPI -Requires-Python: >=3.10 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: pytz>=2024.1 -Requires-Dist: numpy>=1.24.0 -Requires-Dist: pandas>=2.0.0 -Requires-Dist: openpyxl>=3.1.0 -Requires-Dist: Markdown>=3.5.0 -Requires-Dist: Pillow<11.0.0,>=10.2.0 -Requires-Dist: scikit-image>=0.22.0 -Requires-Dist: openai==1.72.0 -Requires-Dist: tiktoken>=0.5.0 -Requires-Dist: google-genai>=0.4.0 -Requires-Dist: anthropic>=0.23.0 -Requires-Dist: cohere>=4.0.0 -Requires-Dist: fastapi>=0.104.1 -Requires-Dist: uvicorn[standard]>=0.31.1 -Requires-Dist: python-multipart>=0.0.6 -Requires-Dist: httpx>=0.25.0 -Requires-Dist: httpx_sse>=0.3.0 -Requires-Dist: sqlalchemy>=2.0.0 -Requires-Dist: psycopg2-binary>=2.9.0 -Requires-Dist: pg8000>=1.30.0 -Requires-Dist: pgvector>=0.2.0 -Requires-Dist: redis>=5.0.0 -Requires-Dist: pydantic>=2.0.0 -Requires-Dist: pydantic-settings>=2.0.0 -Requires-Dist: python-dotenv>=1.0.0 -Requires-Dist: demjson3>=3.0.0 -Requires-Dist: pathvalidate>=3.0.0 -Requires-Dist: docstring_parser>=0.15 -Requires-Dist: jinja2>=3.1.0 -Requires-Dist: humps>=0.2.0 -Requires-Dist: colorama>=0.4.0 -Requires-Dist: rapidfuzz>=3.0.0 -Requires-Dist: rank-bm25>=0.2.0 -Requires-Dist: psutil>=5.9.0 -Requires-Dist: json_repair>=0.12.0 -Requires-Dist: rich<14.0.0,>=13.7.1 -Requires-Dist: anyio>=4.7.0 -Requires-Dist: pyyaml>=6.0.0 -Requires-Dist: requests>=2.31.0 -Requires-Dist: llama_index>=0.9.0 -Requires-Dist: llama-index-embeddings-google-genai>=0.1.0 -Requires-Dist: composio>=0.3.0 -Requires-Dist: mcp>=0.1.0 -Requires-Dist: google-auth>=2.0.0 -Requires-Dist: google-auth-oauthlib>=1.0.0 -Requires-Dist: google-auth-httplib2>=0.1.0 -Requires-Dist: google-api-python-client>=2.0.0 -Requires-Dist: opentelemetry-api>=1.20.0 -Requires-Dist: opentelemetry-sdk>=1.20.0 -Requires-Dist: opentelemetry-exporter-otlp>=1.20.0 -Requires-Dist: opentelemetry-instrumentation-requests>=0.41b0 -Provides-Extra: dev -Requires-Dist: pytest>=6.0.0; extra == "dev" -Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev" -Requires-Dist: pytest-cov>=4.0.0; extra == "dev" -Requires-Dist: black>=23.0.0; extra == "dev" -Requires-Dist: isort>=5.12.0; extra == "dev" -Requires-Dist: flake8>=6.0.0; extra == "dev" -Requires-Dist: mypy>=1.5.0; extra == "dev" -Requires-Dist: ruff>=0.1.0; extra == "dev" -Requires-Dist: pyright>=1.1.0; extra == "dev" -Provides-Extra: voice -Requires-Dist: SpeechRecognition>=3.10.0; extra == "voice" -Requires-Dist: pydub>=0.25.0; extra == "voice" -Provides-Extra: full -Requires-Dist: SpeechRecognition>=3.10.0; extra == "full" -Requires-Dist: pydub>=0.25.0; extra == "full" -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: home-page -Dynamic: keywords -Dynamic: license -Dynamic: license-file -Dynamic: project-url -Dynamic: provides-extra -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary - -![Mirix Logo](https://github.com/RenKoya1/MIRIX/raw/main/assets/logo.png) - -## MIRIX - Multi-Agent Personal Assistant with an Advanced Memory System - -Your personal AI that builds memory through screen observation and natural conversation - -| 🌐 [Website](https://mirix.io) | 📚 [Documentation](https://docs.mirix.io) | 📄 [Paper](https://arxiv.org/abs/2507.07957) | 💬 [Discord](https://discord.gg/S6CeHNrJ) - - ---- - -### Key Features 🔥 - -- **Multi-Agent Memory System:** Six specialized memory components (Core, Episodic, Semantic, Procedural, Resource, Knowledge Vault) managed by dedicated agents -- **Screen Activity Tracking:** Continuous visual data capture and intelligent consolidation into structured memories -- **Privacy-First Design:** All long-term data stored locally with user-controlled privacy settings -- **Advanced Search:** PostgreSQL-native BM25 full-text search with vector similarity support -- **Multi-Modal Input:** Text, images, voice, and screen captures processed seamlessly - -### Quick Start -**End-Users**: For end-users who want to build your own memory using MIRIX, please checkout the quick installation guide [here](https://docs.mirix.io/getting-started/installation/#quick-installation-dmg). - -**Developers**: For users who want to apply our memory system as the backend, please check out our [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). Basically, you just need to run: -``` -git clone git@github.com:Mirix-AI/MIRIX.git -cd MIRIX - -# Create and activate virtual environment -python -m venv mirix_env -source mirix_env/bin/activate # On Windows: mirix_env\Scripts\activate - -pip install -r requirements.txt -``` -Then you can run the following python code: -```python -from mirix.agent import AgentWrapper - -# Initialize agent with configuration -agent = AgentWrapper("./mirix/configs/mirix.yaml") - -# Send basic text information -agent.send_message( - message="The moon now has a president.", - memorizing=True, - force_absorb_content=True -) -``` -For more details, please refer to [Backend Usage](https://docs.mirix.io/user-guide/backend-usage/). - -## Python SDK (NEW!) 🎉 - -We've created a simple [Python SDK](https://pypi.org/project/mirix/0.1.5/) that makes it incredibly easy to integrate Mirix's memory capabilities into your applications: - -### Installationhttps://pypi.org/project/mirix/0.1.5/ -```bash -pip install mirix -``` - -### Quick Start with SDK -```python -from mirix import Mirix - -# Initialize memory agent (defaults to Google Gemini 2.0 Flash) -memory_agent = Mirix(api_key="your-google-api-key") - -# Add memories -memory_agent.add("The moon now has a president") -memory_agent.add("John loves Italian food and is allergic to peanuts") - -# Chat with memory context -response = memory_agent.chat("Does the moon have a president?") -print(response) # "Yes, according to my memory, the moon has a president." - -response = memory_agent.chat("What does John like to eat?") -print(response) # "John loves Italian food. However, he's allergic to peanuts." -``` - -## Integration with Claude Agent SDK 🤝 - -Mirix can be integrated with [Anthropic's Claude Agent SDK](https://docs.claude.com/en/api/agent-sdk/python) to give Claude persistent memory across conversations. This allows Claude to remember context, user preferences, and past interactions. - -### Basic Setup - -Here's a simple example of integrating Mirix with the Claude Agent SDK: - -```python -#!/usr/bin/env python3 -import os -import asyncio -from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage -from mirix import Mirix -from collections import deque -from dotenv import load_dotenv -load_dotenv() - -# Configuration -MEMORY_UPDATE_INTERVAL = 3 # Update memory every N turns -REINIT_INTERVAL = 1 # Rebuild system prompt (retrieve from Mirix) every N turns -KEEP_LAST_N_TURNS = 50 # Keep last N turns in memory buffer - -def build_system_prompt(mirix_agent=None, user_id=None, conversation_buffer=""): - """Build system prompt with optional Mirix memory context""" - system_prompt = """You are a helpful assistant.""" - - # Add Mirix memory context if available - if mirix_agent and user_id and conversation_buffer: - memory_context = mirix_agent.extract_memory_for_system_prompt( - conversation_buffer, user_id - ) - if memory_context: - system_prompt += "\n\nRelevant Memory Context:\n" + memory_context - - return system_prompt - -async def run_agent(): - """Run Claude Agent SDK with Mirix memory integration""" - - # Initialize Mirix memory agent - mirix_agent = Mirix( - model_name="gemini-2.0-flash", - api_key=os.getenv("GEMINI_API_KEY"), - ) - user = mirix_agent.create_user(user_name="Alice") - - # Track conversation for memory updates - conversation_history = deque(maxlen=KEEP_LAST_N_TURNS) - turn_count = 0 - turns_since_reinit = 0 - session_id = None - - while True: - # Build system prompt with memory context - options = ClaudeAgentOptions( - resume=session_id, - allowed_tools=["Task", "Bash", "Read", "Edit", "Write", "WebSearch"], - system_prompt=build_system_prompt( - mirix_agent, user.id, - "\n".join([f"User: {u}\nAssistant: {a}" for u, a in conversation_history]) - ), - model="claude-sonnet-4-5", - max_turns=50 - ) - - user_input = input("User: ").strip() - if user_input.lower() in ['exit', 'quit', 'bye']: - break - - # Get Claude's response - assistant_response = "" - async for message in query(prompt=user_input, options=options): - if hasattr(message, 'subtype') and message.subtype == 'init': - session_id = message.data.get('session_id') - - if isinstance(message, AssistantMessage): - for block in message.content: - if hasattr(block, 'text'): - assistant_response += block.text - print(block.text, flush=True) - - # Update conversation history - conversation_history.append((user_input, assistant_response)) - turn_count += 1 - turns_since_reinit += 1 - - # Periodically update Mirix memory - if turn_count % MEMORY_UPDATE_INTERVAL == 0: - combined = "\n".join([ - f"[User] {u}\n[Assistant] {a}" - for u, a in conversation_history - ]) - await asyncio.to_thread(mirix_agent.add, combined, user_id=user.id) - print("✅ Memory updated!") - -if __name__ == "__main__": - asyncio.run(run_agent()) -``` - -### Key Benefits - -- **Persistent Memory:** Mirix helps Claude remember facts, preferences, and context across sessions -- **Intelligent Retrieval:** Mirix automatically retrieves relevant memories for each conversation -- **Scalable:** Works with conversations of any length without token limit issues -- **Flexible Updates:** Configure how often to update memory (e.g., every N turns) - -### Example Usage - -```bash -cd samples - -# Install dependencies -pip install mirix claude-agent-sdk python-dotenv - -# Set environment variables -export GEMINI_API_KEY="your-google-api-key" -export ANTHROPIC_API_KEY="your-anthropic-api-key" - -# Run the agent -python claude_agent.py -``` - -## License - -Mirix is released under the Apache License 2.0. See the [LICENSE](LICENSE) file for more details. - -## Contact - -For questions, suggestions, or issues, please open an issue on the GitHub repository or contact us at `yuwang@mirix.io` - -## Join Our Community - -Connect with other Mirix users, share your thoughts, and get support: - -### 💬 Discord Community -Join our Discord server for real-time discussions, support, and community updates: -**[https://discord.gg/S6CeHNrJ](https://discord.gg/S6CeHNrJ)** - -### 🎯 Weekly Discussion Sessions -We host weekly discussion sessions where you can: -- Discuss issues and bugs -- Share ideas about future directions -- Get general consultations and support -- Connect with the development team and community - -**📅 Schedule:** Friday nights, 8-9 PM PST -**🔗 Zoom Link:** [https://ucsd.zoom.us/j/96278791276](https://ucsd.zoom.us/j/96278791276) - -### 📱 WeChat Group -
-WeChat QR Code
-WeChat Group -
- -## Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=Mirix-AI/MIRIX&type=Date)](https://star-history.com/#Mirix-AI/MIRIX.&Date) - -## Acknowledgement -We would like to thank [Letta](https://github.com/letta-ai/letta) for open-sourcing their framework, which served as the foundation for the memory system in this project. diff --git a/intuit_ecms_server.egg-info/SOURCES.txt b/intuit_ecms_server.egg-info/SOURCES.txt deleted file mode 100644 index b4ffb4b..0000000 --- a/intuit_ecms_server.egg-info/SOURCES.txt +++ /dev/null @@ -1,273 +0,0 @@ -LICENSE -MANIFEST.in -README.md -setup.py -./mirix/__init__.py -./mirix/__main__.py -./mirix/config.py -./mirix/constants.py -./mirix/embeddings.py -./mirix/errors.py -./mirix/interface.py -./mirix/log.py -./mirix/memory.py -./mirix/sdk.py -./mirix/settings.py -./mirix/system.py -./mirix/tracing.py -./mirix/utils.py -./mirix/voice_utils.py -./mirix/agent/__init__.py -./mirix/agent/agent.py -./mirix/agent/agent_configs.py -./mirix/agent/agent_states.py -./mirix/agent/app_constants.py -./mirix/agent/app_utils.py -./mirix/agent/background_agent.py -./mirix/agent/core_memory_agent.py -./mirix/agent/episodic_memory_agent.py -./mirix/agent/knowledge_vault_memory_agent.py -./mirix/agent/message_queue.py -./mirix/agent/meta_agent.py -./mirix/agent/meta_memory_agent.py -./mirix/agent/procedural_memory_agent.py -./mirix/agent/reflexion_agent.py -./mirix/agent/resource_memory_agent.py -./mirix/agent/semantic_memory_agent.py -./mirix/agent/temporary_message_accumulator.py -./mirix/agent/upload_manager.py -./mirix/client/__init__.py -./mirix/client/client.py -./mirix/client/remote_client.py -./mirix/configs/__init__.py -./mirix/configs/mirix.yaml -./mirix/configs/examples/mirix_azure.yaml -./mirix/configs/examples/mirix_claude.yaml -./mirix/configs/examples/mirix_gemini.yaml -./mirix/configs/examples/mirix_openai.yaml -./mirix/configs/legacy_configs/mirix.yaml -./mirix/configs/legacy_configs/mirix_azure_example.yaml -./mirix/configs/legacy_configs/mirix_custom_model.yaml -./mirix/configs/legacy_configs/mirix_custom_prompts.yaml -./mirix/configs/legacy_configs/mirix_gemini.yaml -./mirix/configs/legacy_configs/mirix_gpt4.yaml -./mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml -./mirix/configs/legacy_configs/mirix_monitor.yaml -./mirix/database/__init__.py -./mirix/database/pglite_connector.py -./mirix/database/redis_client.py -./mirix/database/schema_extractor.py -./mirix/functions/__init__.py -./mirix/functions/ast_parsers.py -./mirix/functions/functions.py -./mirix/functions/helpers.py -./mirix/functions/schema_generator.py -./mirix/functions/function_sets/__init__.py -./mirix/functions/function_sets/base.py -./mirix/functions/function_sets/extras.py -./mirix/functions/function_sets/memory_tools.py -./mirix/functions/mcp_client/__init__.py -./mirix/functions/mcp_client/base_client.py -./mirix/functions/mcp_client/exceptions.py -./mirix/functions/mcp_client/gmail_client.py -./mirix/functions/mcp_client/manager.py -./mirix/functions/mcp_client/stdio_client.py -./mirix/functions/mcp_client/types.py -./mirix/helpers/__init__.py -./mirix/helpers/converters.py -./mirix/helpers/datetime_helpers.py -./mirix/helpers/json_helpers.py -./mirix/helpers/message_helpers.py -./mirix/helpers/tool_rule_solver.py -./mirix/llm_api/__init__.py -./mirix/llm_api/anthropic.py -./mirix/llm_api/anthropic_client.py -./mirix/llm_api/aws_bedrock.py -./mirix/llm_api/azure_openai.py -./mirix/llm_api/azure_openai_client.py -./mirix/llm_api/azure_openai_constants.py -./mirix/llm_api/cohere.py -./mirix/llm_api/cohere_client.py -./mirix/llm_api/google_ai.py -./mirix/llm_api/google_ai_client.py -./mirix/llm_api/helpers.py -./mirix/llm_api/llm_api_tools.py -./mirix/llm_api/llm_client.py -./mirix/llm_api/llm_client_base.py -./mirix/llm_api/mistral.py -./mirix/llm_api/openai.py -./mirix/llm_api/openai_client.py -./mirix/orm/__all__.py -./mirix/orm/__init__.py -./mirix/orm/agent.py -./mirix/orm/base.py -./mirix/orm/block.py -./mirix/orm/blocks_agents.py -./mirix/orm/cloud_file_mapping.py -./mirix/orm/custom_columns.py -./mirix/orm/enums.py -./mirix/orm/episodic_memory.py -./mirix/orm/errors.py -./mirix/orm/file.py -./mirix/orm/knowledge_vault.py -./mirix/orm/message.py -./mirix/orm/mixins.py -./mirix/orm/organization.py -./mirix/orm/procedural_memory.py -./mirix/orm/provider.py -./mirix/orm/resource_memory.py -./mirix/orm/semantic_memory.py -./mirix/orm/sqlalchemy_base.py -./mirix/orm/sqlite_functions.py -./mirix/orm/step.py -./mirix/orm/tool.py -./mirix/orm/tools_agents.py -./mirix/orm/user.py -./mirix/prompts/__init__.py -./mirix/prompts/gpt_persona.py -./mirix/prompts/gpt_summarize.py -./mirix/prompts/gpt_system.py -./mirix/prompts/personas/chill_buddy.txt -./mirix/prompts/personas/concise_analyst.txt -./mirix/prompts/personas/friendly_conversationalist.txt -./mirix/prompts/personas/helpful_assistant.txt -./mirix/prompts/personas/playful_Ironist.txt -./mirix/prompts/personas/project_manager.txt -./mirix/prompts/system/base/background_agent.txt -./mirix/prompts/system/base/chat_agent.txt -./mirix/prompts/system/base/core_memory_agent.txt -./mirix/prompts/system/base/episodic_memory_agent.txt -./mirix/prompts/system/base/knowledge_vault_memory_agent.txt -./mirix/prompts/system/base/meta_memory_agent.txt -./mirix/prompts/system/base/procedural_memory_agent.txt -./mirix/prompts/system/base/reflexion_agent.txt -./mirix/prompts/system/base/resource_memory_agent.txt -./mirix/prompts/system/base/semantic_memory_agent.txt -./mirix/prompts/system/screen_monitor/background_agent.txt -./mirix/prompts/system/screen_monitor/chat_agent.txt -./mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt -./mirix/prompts/system/screen_monitor/core_memory_agent.txt -./mirix/prompts/system/screen_monitor/episodic_memory_agent.txt -./mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt -./mirix/prompts/system/screen_monitor/meta_memory_agent.txt -./mirix/prompts/system/screen_monitor/procedural_memory_agent.txt -./mirix/prompts/system/screen_monitor/reflexion_agent.txt -./mirix/prompts/system/screen_monitor/resource_memory_agent.txt -./mirix/prompts/system/screen_monitor/semantic_memory_agent.txt -./mirix/queue/__init__.py -./mirix/queue/config.py -./mirix/queue/kafka_queue.py -./mirix/queue/manager.py -./mirix/queue/memory_queue.py -./mirix/queue/message_pb2.py -./mirix/queue/queue_interface.py -./mirix/queue/queue_util.py -./mirix/queue/worker.py -./mirix/schemas/__init__.py -./mirix/schemas/agent.py -./mirix/schemas/block.py -./mirix/schemas/cloud_file_mapping.py -./mirix/schemas/embedding_config.py -./mirix/schemas/enums.py -./mirix/schemas/environment_variables.py -./mirix/schemas/episodic_memory.py -./mirix/schemas/file.py -./mirix/schemas/health.py -./mirix/schemas/knowledge_vault.py -./mirix/schemas/llm_config.py -./mirix/schemas/memory.py -./mirix/schemas/message.py -./mirix/schemas/mirix_base.py -./mirix/schemas/mirix_message.py -./mirix/schemas/mirix_message_content.py -./mirix/schemas/mirix_request.py -./mirix/schemas/mirix_response.py -./mirix/schemas/organization.py -./mirix/schemas/procedural_memory.py -./mirix/schemas/providers.py -./mirix/schemas/resource_memory.py -./mirix/schemas/sandbox_config.py -./mirix/schemas/semantic_memory.py -./mirix/schemas/source.py -./mirix/schemas/step.py -./mirix/schemas/tool.py -./mirix/schemas/tool_rule.py -./mirix/schemas/usage.py -./mirix/schemas/user.py -./mirix/schemas/openai/__init__.py -./mirix/schemas/openai/chat_completion_request.py -./mirix/schemas/openai/chat_completion_response.py -./mirix/schemas/openai/chat_completions.py -./mirix/schemas/openai/embedding_response.py -./mirix/schemas/openai/openai.py -./mirix/server/__init__.py -./mirix/server/constants.py -./mirix/server/rest_api.py -./mirix/server/server.py -./mirix/server/startup.sh -./mirix/server/utils.py -./mirix/services/__init__.py -./mirix/services/agent_manager.py -./mirix/services/block_manager.py -./mirix/services/cloud_file_mapping_manager.py -./mirix/services/episodic_memory_manager.py -./mirix/services/file_manager.py -./mirix/services/knowledge_vault_manager.py -./mirix/services/mcp_marketplace.py -./mirix/services/mcp_tool_registry.py -./mirix/services/message_manager.py -./mirix/services/organization_manager.py -./mirix/services/per_agent_lock_manager.py -./mirix/services/procedural_memory_manager.py -./mirix/services/provider_manager.py -./mirix/services/resource_memory_manager.py -./mirix/services/semantic_memory_manager.py -./mirix/services/step_manager.py -./mirix/services/tool_execution_sandbox.py -./mirix/services/tool_manager.py -./mirix/services/user_manager.py -./mirix/services/utils.py -./mirix/services/helpers/__init__.py -./mirix/services/helpers/agent_manager_helper.py -assets/icon.png -assets/logo.png -mirix/configs/mirix.yaml -mirix/configs/examples/mirix_azure.yaml -mirix/configs/examples/mirix_claude.yaml -mirix/configs/examples/mirix_gemini.yaml -mirix/configs/examples/mirix_openai.yaml -mirix/configs/legacy_configs/mirix.yaml -mirix/configs/legacy_configs/mirix_azure_example.yaml -mirix/configs/legacy_configs/mirix_custom_model.yaml -mirix/configs/legacy_configs/mirix_custom_prompts.yaml -mirix/configs/legacy_configs/mirix_gemini.yaml -mirix/configs/legacy_configs/mirix_gpt4.yaml -mirix/configs/legacy_configs/mirix_gpt4o-mini.yaml -mirix/configs/legacy_configs/mirix_monitor.yaml -mirix/prompts/personas/chill_buddy.txt -mirix/prompts/personas/concise_analyst.txt -mirix/prompts/personas/friendly_conversationalist.txt -mirix/prompts/personas/helpful_assistant.txt -mirix/prompts/personas/playful_Ironist.txt -mirix/prompts/personas/project_manager.txt -mirix/prompts/system/base/background_agent.txt -mirix/prompts/system/base/chat_agent.txt -mirix/prompts/system/base/core_memory_agent.txt -mirix/prompts/system/base/episodic_memory_agent.txt -mirix/prompts/system/base/knowledge_vault_memory_agent.txt -mirix/prompts/system/base/meta_memory_agent.txt -mirix/prompts/system/base/procedural_memory_agent.txt -mirix/prompts/system/base/reflexion_agent.txt -mirix/prompts/system/base/resource_memory_agent.txt -mirix/prompts/system/base/semantic_memory_agent.txt -mirix/prompts/system/screen_monitor/background_agent.txt -mirix/prompts/system/screen_monitor/chat_agent.txt -mirix/prompts/system/screen_monitor/chat_agent_monitor_on.txt -mirix/prompts/system/screen_monitor/core_memory_agent.txt -mirix/prompts/system/screen_monitor/episodic_memory_agent.txt -mirix/prompts/system/screen_monitor/knowledge_vault_memory_agent.txt -mirix/prompts/system/screen_monitor/meta_memory_agent.txt -mirix/prompts/system/screen_monitor/procedural_memory_agent.txt -mirix/prompts/system/screen_monitor/reflexion_agent.txt -mirix/prompts/system/screen_monitor/resource_memory_agent.txt -mirix/prompts/system/screen_monitor/semantic_memory_agent.txt \ No newline at end of file diff --git a/intuit_ecms_server.egg-info/dependency_links.txt b/intuit_ecms_server.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/intuit_ecms_server.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/intuit_ecms_server.egg-info/entry_points.txt b/intuit_ecms_server.egg-info/entry_points.txt deleted file mode 100644 index ace4c51..0000000 --- a/intuit_ecms_server.egg-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[console_scripts] -mirix-server = mirix.server.rest_api:main diff --git a/intuit_ecms_server.egg-info/not-zip-safe b/intuit_ecms_server.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/intuit_ecms_server.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/intuit_ecms_server.egg-info/requires.txt b/intuit_ecms_server.egg-info/requires.txt deleted file mode 100644 index dac99f0..0000000 --- a/intuit_ecms_server.egg-info/requires.txt +++ /dev/null @@ -1,70 +0,0 @@ -pytz>=2024.1 -numpy>=1.24.0 -pandas>=2.0.0 -openpyxl>=3.1.0 -Markdown>=3.5.0 -Pillow<11.0.0,>=10.2.0 -scikit-image>=0.22.0 -openai==1.72.0 -tiktoken>=0.5.0 -google-genai>=0.4.0 -anthropic>=0.23.0 -cohere>=4.0.0 -fastapi>=0.104.1 -uvicorn[standard]>=0.31.1 -python-multipart>=0.0.6 -httpx>=0.25.0 -httpx_sse>=0.3.0 -sqlalchemy>=2.0.0 -psycopg2-binary>=2.9.0 -pg8000>=1.30.0 -pgvector>=0.2.0 -redis>=5.0.0 -pydantic>=2.0.0 -pydantic-settings>=2.0.0 -python-dotenv>=1.0.0 -demjson3>=3.0.0 -pathvalidate>=3.0.0 -docstring_parser>=0.15 -jinja2>=3.1.0 -humps>=0.2.0 -colorama>=0.4.0 -rapidfuzz>=3.0.0 -rank-bm25>=0.2.0 -psutil>=5.9.0 -json_repair>=0.12.0 -rich<14.0.0,>=13.7.1 -anyio>=4.7.0 -pyyaml>=6.0.0 -requests>=2.31.0 -llama_index>=0.9.0 -llama-index-embeddings-google-genai>=0.1.0 -composio>=0.3.0 -mcp>=0.1.0 -google-auth>=2.0.0 -google-auth-oauthlib>=1.0.0 -google-auth-httplib2>=0.1.0 -google-api-python-client>=2.0.0 -opentelemetry-api>=1.20.0 -opentelemetry-sdk>=1.20.0 -opentelemetry-exporter-otlp>=1.20.0 -opentelemetry-instrumentation-requests>=0.41b0 - -[dev] -pytest>=6.0.0 -pytest-asyncio>=0.21.0 -pytest-cov>=4.0.0 -black>=23.0.0 -isort>=5.12.0 -flake8>=6.0.0 -mypy>=1.5.0 -ruff>=0.1.0 -pyright>=1.1.0 - -[full] -SpeechRecognition>=3.10.0 -pydub>=0.25.0 - -[voice] -SpeechRecognition>=3.10.0 -pydub>=0.25.0 diff --git a/intuit_ecms_server.egg-info/top_level.txt b/intuit_ecms_server.egg-info/top_level.txt deleted file mode 100644 index a20b1e6..0000000 --- a/intuit_ecms_server.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -mirix diff --git a/scripts/packaging/build_packages.sh b/scripts/packaging/build_packages.sh index ee8f334..905797f 100755 --- a/scripts/packaging/build_packages.sh +++ b/scripts/packaging/build_packages.sh @@ -41,6 +41,8 @@ rm -rf mirix_client.egg-info rm -rf mirix_server.egg-info rm -rf intuit_ecms_client.egg-info rm -rf intuit_ecms_server.egg-info +rm -rf jl_ecms_client.egg-info +rm -rf jl_ecms_server.egg-info echo -e "${GREEN}✓ Cleaned${NC}" echo "" @@ -61,7 +63,7 @@ echo -e "${GREEN}✓ Build tools ready${NC}" echo "" # Build client package -echo -e "${BLUE}[3/5] Building intuit-ecms-client package...${NC}" +echo -e "${BLUE}[3/5] Building jl-ecms-client package...${NC}" python scripts/packaging/setup_client.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Client package built successfully${NC}" @@ -74,7 +76,7 @@ fi echo "" # Build server package -echo -e "${BLUE}[4/5] Building intuit-ecms-server package...${NC}" +echo -e "${BLUE}[4/5] Building jl-ecms-server package...${NC}" python scripts/packaging/setup_server.py sdist bdist_wheel if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Server package built successfully${NC}" @@ -105,8 +107,8 @@ echo -e " ${BLUE}pip install dist/intuit_ecms_client-${CLIENT_VERSION}-py3-none echo -e " ${BLUE}pip install dist/intuit_ecms_server-${SERVER_VERSION}-py3-none-any.whl${NC}" echo "" echo "To publish to PyPI:" -echo -e " ${BLUE}twine upload dist/intuit-ecms-client-${CLIENT_VERSION}*${NC}" -echo -e " ${BLUE}twine upload dist/intuit-ecms-server-${SERVER_VERSION}*${NC}" +echo -e " ${BLUE}twine upload dist/jl-ecms-client-${CLIENT_VERSION}*${NC}" +echo -e " ${BLUE}twine upload dist/jl-ecms-server-${SERVER_VERSION}*${NC}" echo "" echo "To test packages:" echo -e " ${BLUE}twine check dist/*${NC}" diff --git a/scripts/packaging/setup_client.py b/scripts/packaging/setup_client.py index dc1f9f9..673387a 100644 --- a/scripts/packaging/setup_client.py +++ b/scripts/packaging/setup_client.py @@ -12,7 +12,8 @@ """ import os -from setuptools import setup, find_packages + +from setuptools import find_packages, setup # Read the contents of README file this_directory = os.path.abspath(os.path.dirname(__file__)) @@ -47,7 +48,7 @@ def get_version(): os.chdir(project_root) setup( - name="intuit-ecms-client", + name="jl-ecms-client", version=get_version(), author="Mirix AI", author_email="yuwang@mirix.io", @@ -103,4 +104,3 @@ def get_version(): license="Apache License 2.0", zip_safe=False, ) - diff --git a/scripts/packaging/setup_server.py b/scripts/packaging/setup_server.py index dc20259..6fe6db9 100644 --- a/scripts/packaging/setup_server.py +++ b/scripts/packaging/setup_server.py @@ -140,7 +140,7 @@ def get_version(): os.chdir(project_root) setup( - name="intuit-ecms-server", + name="jl-ecms-server", version=get_version(), author="Mirix AI", author_email="yuwang@mirix.io", @@ -157,7 +157,7 @@ def get_version(): # Include all packages packages=find_packages( where=".", - exclude=["tests*", "scripts*", "frontend*", "public_evaluations*", "samples*"] + exclude=["tests*", "scripts*", "frontend*", "public_evaluations*", "samples*"], ), package_dir={"": "."}, include_package_data=True, From f3f84b153b6c6314614f74481ba29727793732ff Mon Sep 17 00:00:00 2001 From: Lucas Parzych Date: Thu, 6 Nov 2025 11:42:46 -0800 Subject: [PATCH 6/6] fix: 0.2.3 fix bugs --- mirix/__init__.py | 2 +- mirix/queue/message_pb2.py | 6 +++--- poetry.lock | 14 +++++++++++++- pyproject.toml | 2 +- scripts/packaging/setup_server.py | 29 +++++++++++------------------ 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/mirix/__init__.py b/mirix/__init__.py index e4128c3..eaa5abd 100755 --- a/mirix/__init__.py +++ b/mirix/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.2.0" +__version__ = "0.2.3" # import clients diff --git a/mirix/queue/message_pb2.py b/mirix/queue/message_pb2.py index 84f68e4..e97e3bf 100644 --- a/mirix/queue/message_pb2.py +++ b/mirix/queue/message_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: message.proto -# Protobuf Python Version: 6.33.0 +# Protobuf Python Version: 5.29.0 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -11,8 +11,8 @@ from google.protobuf.internal import builder as _builder _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, - 6, - 33, + 5, + 29, 0, '', 'message.proto' diff --git a/poetry.lock b/poetry.lock index 4a0e928..b473546 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -1176,6 +1176,8 @@ files = [ {file = "greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d"}, {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5"}, {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8"}, {file = "greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c"}, {file = "greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2"}, {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246"}, @@ -1185,6 +1187,8 @@ files = [ {file = "greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8"}, {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52"}, {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5"}, {file = "greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9"}, {file = "greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd"}, {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb"}, @@ -1194,6 +1198,8 @@ files = [ {file = "greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0"}, {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0"}, {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d"}, {file = "greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02"}, {file = "greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31"}, {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945"}, @@ -1203,6 +1209,8 @@ files = [ {file = "greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671"}, {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b"}, {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929"}, {file = "greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b"}, {file = "greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f"}, @@ -1210,6 +1218,8 @@ files = [ {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337"}, + {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269"}, + {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681"}, {file = "greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01"}, {file = "greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c"}, {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d"}, @@ -1219,6 +1229,8 @@ files = [ {file = "greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df"}, {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594"}, {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be"}, {file = "greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b"}, {file = "greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb"}, {file = "greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d"}, diff --git a/pyproject.toml b/pyproject.toml index a46bce9..b721b20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mirix" -version = "0.2.0" +version = "0.2.3" description = "Multi-Agent Personal Assistant with an Advanced Memory System" readme = "README.md" license = {text = "Apache License 2.0"} diff --git a/scripts/packaging/setup_server.py b/scripts/packaging/setup_server.py index 6fe6db9..04566c9 100644 --- a/scripts/packaging/setup_server.py +++ b/scripts/packaging/setup_server.py @@ -29,16 +29,21 @@ with open(os.path.join(project_root, "README.md"), encoding="utf-8") as f: long_description = f.read() + # Get version def get_version(): import re + version_file = os.path.join(project_root, "mirix", "__init__.py") with open(version_file, "r", encoding="utf-8") as version_f: - version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_f.read(), re.M) + version_match = re.search( + r"^__version__ = ['\"]([^'\"]*)['\"]", version_f.read(), re.M + ) if version_match: return version_match.group(1) raise RuntimeError("Unable to find version string.") + # Server dependencies (comprehensive) server_dependencies = [ # Core dependencies @@ -49,32 +54,27 @@ def get_version(): "Markdown>=3.5.0", "Pillow>=10.2.0,<11.0.0", "scikit-image>=0.22.0", - # LLM APIs "openai==1.72.0", "tiktoken>=0.5.0", "google-genai>=0.4.0", "anthropic>=0.23.0", "cohere>=4.0.0", - # FastAPI and server "fastapi>=0.104.1", "uvicorn[standard]>=0.31.1", "python-multipart>=0.0.6", "httpx>=0.25.0", "httpx_sse>=0.3.0", - # Database "sqlalchemy>=2.0.0", "psycopg2-binary>=2.9.0", "pg8000>=1.30.0", "pgvector>=0.2.0", "redis>=5.0.0", # Redis client - # Pydantic and validation "pydantic>=2.0.0", "pydantic-settings>=2.0.0", - # Utilities "python-dotenv>=1.0.0", "demjson3>=3.0.0", @@ -91,26 +91,27 @@ def get_version(): "anyio>=4.7.0", "pyyaml>=6.0.0", "requests>=2.31.0", - # LlamaIndex "llama_index>=0.9.0", "llama-index-embeddings-google-genai>=0.1.0", - # Composio and MCP "composio>=0.3.0", "mcp>=0.1.0", - # Google APIs "google-auth>=2.0.0", "google-auth-oauthlib>=1.0.0", "google-auth-httplib2>=0.1.0", "google-api-python-client>=2.0.0", - # Observability "opentelemetry-api>=1.20.0", "opentelemetry-sdk>=1.20.0", "opentelemetry-exporter-otlp>=1.20.0", "opentelemetry-instrumentation-requests>=0.41b0", + # Voice processing + "SpeechRecognition>=3.10.0", + "pydub>=0.25.0", + # Protobuf (for queue message serialization) - compatible with pynumaflow + "protobuf>=3.20,<6.0", ] # Optional dependencies @@ -126,14 +127,6 @@ def get_version(): "ruff>=0.1.0", "pyright>=1.1.0", ], - "voice": [ - "SpeechRecognition>=3.10.0", - "pydub>=0.25.0", - ], - "full": [ - "SpeechRecognition>=3.10.0", - "pydub>=0.25.0", - ], } # Change to project root directory so we can use relative paths