diff --git a/mem0-ts/src/oss/src/utils/factory.ts b/mem0-ts/src/oss/src/utils/factory.ts index 6be2147a1..14a22ad46 100644 --- a/mem0-ts/src/oss/src/utils/factory.ts +++ b/mem0-ts/src/oss/src/utils/factory.ts @@ -1,6 +1,5 @@ import { OpenAIEmbedder } from "../embeddings/openai"; import { OllamaEmbedder } from "../embeddings/ollama"; -import { LMStudioEmbedder } from "../embeddings/lmstudio"; import { OpenAILLM } from "../llms/openai"; import { OpenAIStructuredLLM } from "../llms/openai_structured"; import { AnthropicLLM } from "../llms/anthropic"; @@ -20,7 +19,6 @@ import { Qdrant } from "../vector_stores/qdrant"; import { VectorizeDB } from "../vector_stores/vectorize"; import { RedisDB } from "../vector_stores/redis"; import { OllamaLLM } from "../llms/ollama"; -import { LMStudioLLM } from "../llms/lmstudio"; import { SupabaseDB } from "../vector_stores/supabase"; import { SQLiteManager } from "../storage/SQLiteManager"; import { MemoryHistoryManager } from "../storage/MemoryHistoryManager"; @@ -35,7 +33,6 @@ import { LangchainEmbedder } from "../embeddings/langchain"; import { LangchainVectorStore } from "../vector_stores/langchain"; import { AzureAISearch } from "../vector_stores/azure_ai_search"; import { PGVector } from "../vector_stores/pgvector"; -import { DeepSeekLLM } from "../llms/deepseek"; export class EmbedderFactory { static create(provider: string, config: EmbeddingConfig): Embedder { @@ -44,8 +41,6 @@ export class EmbedderFactory { return new OpenAIEmbedder(config); case "ollama": return new OllamaEmbedder(config); - case "lmstudio": - return new LMStudioEmbedder(config); case "google": case "gemini": return new GoogleEmbedder(config); @@ -72,8 +67,6 @@ export class LLMFactory { return new GroqLLM(config); case "ollama": return new OllamaLLM(config); - case "lmstudio": - return new LMStudioLLM(config); case "google": case "gemini": return new GoogleLLM(config); @@ -83,8 +76,6 @@ export class LLMFactory { return new MistralLLM(config); case "langchain": return new LangchainLLM(config); - case "deepseek": - return new DeepSeekLLM(config); default: throw new Error(`Unsupported LLM provider: ${provider}`); } diff --git a/mem0/memory/main.py b/mem0/memory/main.py index a713a82cd..ba6226ffd 100644 --- a/mem0/memory/main.py +++ b/mem0/memory/main.py @@ -995,6 +995,13 @@ class Memory(MemoryBase): # Apply enhanced metadata filtering if advanced operators are detected if filters and self._has_advanced_operators(filters): processed_filters = self._process_metadata_filters(filters) + # Remove original logical/operator keys that _build_filters_and_metadata + # copied verbatim from input_filters — they have now been reprocessed. + for logical_key in ("AND", "OR", "NOT"): + effective_filters.pop(logical_key, None) + for fk in list(filters.keys()): + if fk not in ("AND", "OR", "NOT") and fk in effective_filters and isinstance(filters[fk], dict): + effective_filters.pop(fk, None) effective_filters.update(processed_filters) elif filters: # Simple filters, merge directly @@ -1235,7 +1242,7 @@ class Memory(MemoryBase): additional_metadata = {k: v for k, v in payload.items() if k not in core_and_promoted_keys} if additional_metadata: - if "metadata" not in memory_item_dict: + if not memory_item_dict.get("metadata"): memory_item_dict["metadata"] = {} memory_item_dict["metadata"].update(additional_metadata) @@ -2332,6 +2339,13 @@ class AsyncMemory(MemoryBase): # Apply enhanced metadata filtering if advanced operators are detected if filters and self._has_advanced_operators(filters): processed_filters = self._process_metadata_filters(filters) + # Remove original logical/operator keys that _build_filters_and_metadata + # copied verbatim from input_filters — they have now been reprocessed. + for logical_key in ("AND", "OR", "NOT"): + effective_filters.pop(logical_key, None) + for fk in list(filters.keys()): + if fk not in ("AND", "OR", "NOT") and fk in effective_filters and isinstance(filters[fk], dict): + effective_filters.pop(fk, None) effective_filters.update(processed_filters) elif filters: # Simple filters, merge directly @@ -2572,7 +2586,7 @@ class AsyncMemory(MemoryBase): additional_metadata = {k: v for k, v in payload.items() if k not in core_and_promoted_keys} if additional_metadata: - if "metadata" not in memory_item_dict: + if not memory_item_dict.get("metadata"): memory_item_dict["metadata"] = {} memory_item_dict["metadata"].update(additional_metadata)