Merge remote-tracking branch 'origin/feat/v3-pipeline' into feat/v3-pipeline
# Conflicts: # mem0-ts/src/oss/src/utils/factory.ts # mem0/vector_stores/milvus.py # mem0/vector_stores/qdrant.py
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
import { OpenAIEmbedder } from "../embeddings/openai";
|
import { OpenAIEmbedder } from "../embeddings/openai";
|
||||||
import { OllamaEmbedder } from "../embeddings/ollama";
|
import { OllamaEmbedder } from "../embeddings/ollama";
|
||||||
import { LMStudioEmbedder } from "../embeddings/lmstudio";
|
|
||||||
import { OpenAILLM } from "../llms/openai";
|
import { OpenAILLM } from "../llms/openai";
|
||||||
import { OpenAIStructuredLLM } from "../llms/openai_structured";
|
import { OpenAIStructuredLLM } from "../llms/openai_structured";
|
||||||
import { AnthropicLLM } from "../llms/anthropic";
|
import { AnthropicLLM } from "../llms/anthropic";
|
||||||
@@ -20,7 +19,6 @@ import { Qdrant } from "../vector_stores/qdrant";
|
|||||||
import { VectorizeDB } from "../vector_stores/vectorize";
|
import { VectorizeDB } from "../vector_stores/vectorize";
|
||||||
import { RedisDB } from "../vector_stores/redis";
|
import { RedisDB } from "../vector_stores/redis";
|
||||||
import { OllamaLLM } from "../llms/ollama";
|
import { OllamaLLM } from "../llms/ollama";
|
||||||
import { LMStudioLLM } from "../llms/lmstudio";
|
|
||||||
import { SupabaseDB } from "../vector_stores/supabase";
|
import { SupabaseDB } from "../vector_stores/supabase";
|
||||||
import { SQLiteManager } from "../storage/SQLiteManager";
|
import { SQLiteManager } from "../storage/SQLiteManager";
|
||||||
import { MemoryHistoryManager } from "../storage/MemoryHistoryManager";
|
import { MemoryHistoryManager } from "../storage/MemoryHistoryManager";
|
||||||
@@ -35,7 +33,6 @@ import { LangchainEmbedder } from "../embeddings/langchain";
|
|||||||
import { LangchainVectorStore } from "../vector_stores/langchain";
|
import { LangchainVectorStore } from "../vector_stores/langchain";
|
||||||
import { AzureAISearch } from "../vector_stores/azure_ai_search";
|
import { AzureAISearch } from "../vector_stores/azure_ai_search";
|
||||||
import { PGVector } from "../vector_stores/pgvector";
|
import { PGVector } from "../vector_stores/pgvector";
|
||||||
import { DeepSeekLLM } from "../llms/deepseek";
|
|
||||||
|
|
||||||
export class EmbedderFactory {
|
export class EmbedderFactory {
|
||||||
static create(provider: string, config: EmbeddingConfig): Embedder {
|
static create(provider: string, config: EmbeddingConfig): Embedder {
|
||||||
@@ -44,8 +41,6 @@ export class EmbedderFactory {
|
|||||||
return new OpenAIEmbedder(config);
|
return new OpenAIEmbedder(config);
|
||||||
case "ollama":
|
case "ollama":
|
||||||
return new OllamaEmbedder(config);
|
return new OllamaEmbedder(config);
|
||||||
case "lmstudio":
|
|
||||||
return new LMStudioEmbedder(config);
|
|
||||||
case "google":
|
case "google":
|
||||||
case "gemini":
|
case "gemini":
|
||||||
return new GoogleEmbedder(config);
|
return new GoogleEmbedder(config);
|
||||||
@@ -72,8 +67,6 @@ export class LLMFactory {
|
|||||||
return new GroqLLM(config);
|
return new GroqLLM(config);
|
||||||
case "ollama":
|
case "ollama":
|
||||||
return new OllamaLLM(config);
|
return new OllamaLLM(config);
|
||||||
case "lmstudio":
|
|
||||||
return new LMStudioLLM(config);
|
|
||||||
case "google":
|
case "google":
|
||||||
case "gemini":
|
case "gemini":
|
||||||
return new GoogleLLM(config);
|
return new GoogleLLM(config);
|
||||||
@@ -83,8 +76,6 @@ export class LLMFactory {
|
|||||||
return new MistralLLM(config);
|
return new MistralLLM(config);
|
||||||
case "langchain":
|
case "langchain":
|
||||||
return new LangchainLLM(config);
|
return new LangchainLLM(config);
|
||||||
case "deepseek":
|
|
||||||
return new DeepSeekLLM(config);
|
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unsupported LLM provider: ${provider}`);
|
throw new Error(`Unsupported LLM provider: ${provider}`);
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-2
@@ -995,6 +995,13 @@ class Memory(MemoryBase):
|
|||||||
# Apply enhanced metadata filtering if advanced operators are detected
|
# Apply enhanced metadata filtering if advanced operators are detected
|
||||||
if filters and self._has_advanced_operators(filters):
|
if filters and self._has_advanced_operators(filters):
|
||||||
processed_filters = self._process_metadata_filters(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)
|
effective_filters.update(processed_filters)
|
||||||
elif filters:
|
elif filters:
|
||||||
# Simple filters, merge directly
|
# 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}
|
additional_metadata = {k: v for k, v in payload.items() if k not in core_and_promoted_keys}
|
||||||
if additional_metadata:
|
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"] = {}
|
||||||
memory_item_dict["metadata"].update(additional_metadata)
|
memory_item_dict["metadata"].update(additional_metadata)
|
||||||
|
|
||||||
@@ -2332,6 +2339,13 @@ class AsyncMemory(MemoryBase):
|
|||||||
# Apply enhanced metadata filtering if advanced operators are detected
|
# Apply enhanced metadata filtering if advanced operators are detected
|
||||||
if filters and self._has_advanced_operators(filters):
|
if filters and self._has_advanced_operators(filters):
|
||||||
processed_filters = self._process_metadata_filters(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)
|
effective_filters.update(processed_filters)
|
||||||
elif filters:
|
elif filters:
|
||||||
# Simple filters, merge directly
|
# 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}
|
additional_metadata = {k: v for k, v in payload.items() if k not in core_and_promoted_keys}
|
||||||
if additional_metadata:
|
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"] = {}
|
||||||
memory_item_dict["metadata"].update(additional_metadata)
|
memory_item_dict["metadata"].update(additional_metadata)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user