Memori icon indicating copy to clipboard operation
Memori copied to clipboard

After enabling auto_ingest, multi-user chat enters an infinite loop.

Open tianqihou opened this issue 3 months ago • 3 comments

the input will be like this:

--- Conversation History --- User: User query: User query: 你还记得我么 User: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: 你还记得我么 --- End History ---

--- Conversation History --- User: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: User query: 你还记得我么 User: User query: User query: User query: User query: User query: User query: User query: 你还记得我么 --- End History ---

You are a Memory Search Agent responsible for understanding user queries and planning effective memory retrieval strategies.

Your primary functions:

  1. Analyze Query Intent: Understand what the user is actually looking for
  2. Extract Search Parameters: Identify key entities, topics, and concepts
  3. Plan Search Strategy: Recommend the best approach to find relevant memories
  4. Filter Recommendations: Suggest appropriate filters for category, importance, etc.

MEMORY CATEGORIES AVAILABLE:

  • fact: Factual information, definitions, technical details, specific data points
  • preference: User preferences, likes/dislikes, settings, personal choices, opinions
  • skill: Skills, abilities, competencies, learning progress, expertise levels
  • context: Project context, work environment, current situations, background info
  • rule: Rules, policies, procedures, guidelines, constraints

tianqihou avatar Sep 25 '25 07:09 tianqihou

Hi @tianqihou , Thanks for the report. This infinite loop with auto_ingest + multi-user is a critical bug. Can you share the code to reproduce this issue? Also helpful:

Your Memori config Steps to trigger the loop

We'll prioritize the fix once we can reproduce it. Thanks!

harshalmore31 avatar Sep 26 '25 16:09 harshalmore31

examples/multiple-users/fastapi_multiuser_app.py

I only modified this function:


def get_or_create_user_memory(user_id: str) -> Memori:
    """Get existing or create new Memori instance for user using shared database"""
    if user_id not in user_memories:
        print(f"👤 Creating new memory for user: {user_id}")

        user_memory = Memori(
            database_connect=WEB_DATABASE_PATH,
            namespace=f"fastapi_user_{user_id}",
            auto_ingest=True,
            conscious_ingest=True,
            base_url=os.getenv("OPENAI_API_BASE_URL"),
            model=os.getenv("OPENAI_API_MODEL"),
        )

        user_memory.enable()

        user_memories[user_id] = user_memory

        # Track user session info
        user_sessions[user_id] = {
            "created_at": datetime.now().isoformat(),
            "last_active": datetime.now().isoformat(),
            "message_count": 0,
            "namespace": f"fastapi_user_{user_id}",
        }

        # Store initial user session info
        session_message = {
            "role": "system",
            "content": f"""New user session started for {user_id} at {datetime.now().isoformat()}.
            
This is a FastAPI-based chat session. The user will interact through API endpoints.
User namespace: fastapi_user_{user_id}
Database: {WEB_DATABASE_PATH}

Remember this user's preferences and conversation history within their isolated namespace.
""",
        }

        completion(
            model="openai/" + os.getenv("OPENAI_API_MODEL"),
            api_base=os.getenv("OPENAI_API_BASE_URL"),
            messages=[session_message],
        )

tianqihou avatar Sep 26 '25 16:09 tianqihou

I'm just using the default namespace and I've had it kick off what seems to be an infinite loop hitting a rate limit in my OpenAI account and blowing through several dollars of budget instantly. Just letting it sit around with the server running and not processing anything. I suppose the library is doing something in the background related to the memory processing.

ERROR: Fallback memory processing failed for x: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-4o in organization org on tokens per min (TPM): Limit 450000, Used 420279, Requested 31663. Please try again in 258ms. Visit https://platform.openai.com/account/rate-limits to learn more.', 'type': 'tokens', 'param': None, 'code': 'rate_limit_exceeded'}}

Update: I wonder if I am causing the infinite loop in this case by viewing the SQLite DB in TablePlus while the application is also trying to access the file. Could be write-locking the file and then the library is retrying in a loop? But I'm unsure, as I've closed TablePlus and still seemed to experience incidents where my budget gets zapped. Definitely needs to be better protection for these runaway budget-eating events.

ChronicLynx avatar Sep 28 '25 21:09 ChronicLynx