After enabling auto_ingest, multi-user chat enters an infinite loop.
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:
- Analyze Query Intent: Understand what the user is actually looking for
- Extract Search Parameters: Identify key entities, topics, and concepts
- Plan Search Strategy: Recommend the best approach to find relevant memories
- 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
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!
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],
)
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.