fix: OSS Python SDK hygiene batch, 9 small bug fixes (#6770)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from typing import Optional, Literal
|
||||
from typing import Literal, Optional
|
||||
|
||||
from mem0.embeddings.base import EmbeddingBase
|
||||
from mem0.configs.embeddings.base import BaseEmbedderConfig
|
||||
from mem0.embeddings.base import EmbeddingBase
|
||||
|
||||
try:
|
||||
from fastembed import TextEmbedding
|
||||
@@ -29,4 +29,4 @@ class FastEmbedEmbedding(EmbeddingBase):
|
||||
"""
|
||||
text = text.replace("\n", " ")
|
||||
embeddings = list(self.dense_model.embed(text))
|
||||
return embeddings[0]
|
||||
return embeddings[0].tolist()
|
||||
|
||||
@@ -17,7 +17,7 @@ class HuggingFaceEmbedding(EmbeddingBase):
|
||||
super().__init__(config)
|
||||
|
||||
if self.config.huggingface_base_url:
|
||||
self.client = OpenAI(base_url=self.config.huggingface_base_url)
|
||||
self.client = OpenAI(base_url=self.config.huggingface_base_url, api_key=self.config.api_key)
|
||||
self.config.model = self.config.model or "tei"
|
||||
else:
|
||||
self.config.model = self.config.model or "multi-qa-MiniLM-L6-cos-v1"
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Literal, Optional
|
||||
|
||||
from mem0.configs.embeddings.base import BaseEmbedderConfig
|
||||
@@ -8,17 +6,7 @@ from mem0.embeddings.base import EmbeddingBase
|
||||
try:
|
||||
from ollama import Client
|
||||
except ImportError:
|
||||
user_input = input("The 'ollama' library is required. Install it now? [y/N]: ")
|
||||
if user_input.lower() == "y":
|
||||
try:
|
||||
subprocess.check_call([sys.executable, "-m", "pip", "install", "ollama"])
|
||||
from ollama import Client
|
||||
except subprocess.CalledProcessError:
|
||||
print("Failed to install 'ollama'. Please install it manually using 'pip install ollama'.")
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("The required 'ollama' library is not installed.")
|
||||
sys.exit(1)
|
||||
raise ImportError("The 'ollama' library is required. Please install it using 'pip install ollama'.")
|
||||
|
||||
|
||||
class OllamaEmbedding(EmbeddingBase):
|
||||
|
||||
@@ -121,6 +121,8 @@ def remove_code_blocks(content: str) -> str:
|
||||
- If a code block is detected, it returns only the inner content, stripping out the markers.
|
||||
- If no code block markers are found, the original content is returned as-is.
|
||||
"""
|
||||
if content is None:
|
||||
return ""
|
||||
pattern = r"^```[a-zA-Z0-9]*\n([\s\S]*?)\n```$"
|
||||
match = re.match(pattern, content.strip())
|
||||
match_res=match.group(1).strip() if match else content.strip()
|
||||
@@ -213,8 +215,8 @@ def parse_vision_messages(messages, llm=None, vision_details="auto"):
|
||||
try:
|
||||
description = get_image_description(image_url, llm, vision_details)
|
||||
returned_messages.append({"role": role, "content": description})
|
||||
except Exception:
|
||||
raise Exception(f"Error while downloading {image_url}.")
|
||||
except Exception as e:
|
||||
raise Exception(f"Error while downloading {image_url}.") from e
|
||||
else:
|
||||
# Regular text content
|
||||
returned_messages.append(msg)
|
||||
@@ -227,7 +229,7 @@ def process_telemetry_filters(filters):
|
||||
Process the telemetry filters
|
||||
"""
|
||||
if filters is None:
|
||||
return {}
|
||||
return [], {}
|
||||
|
||||
encoded_ids = {}
|
||||
if "user_id" in filters:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import os
|
||||
from typing import List, Dict, Any
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from mem0.reranker.base import BaseReranker
|
||||
|
||||
@@ -84,7 +84,10 @@ class CohereReranker(BaseReranker):
|
||||
except Exception as e:
|
||||
# Fallback to original order if reranking fails
|
||||
logger.warning("Cohere reranking failed, falling back to original order: %s", e)
|
||||
fallback_docs = []
|
||||
for doc in documents:
|
||||
doc['rerank_score'] = 0.0
|
||||
fallback_doc = doc.copy()
|
||||
fallback_doc['rerank_score'] = 0.0
|
||||
fallback_docs.append(fallback_doc)
|
||||
final_top_k = top_k or self.config.top_k
|
||||
return documents[:final_top_k] if final_top_k else documents
|
||||
return fallback_docs[:final_top_k] if final_top_k else fallback_docs
|
||||
@@ -1,14 +1,15 @@
|
||||
import logging
|
||||
from typing import List, Dict, Any, Union
|
||||
from typing import Any, Dict, List, Union
|
||||
|
||||
import numpy as np
|
||||
|
||||
from mem0.reranker.base import BaseReranker
|
||||
from mem0.configs.rerankers.base import BaseRerankerConfig
|
||||
from mem0.configs.rerankers.huggingface import HuggingFaceRerankerConfig
|
||||
from mem0.reranker.base import BaseReranker
|
||||
|
||||
try:
|
||||
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
||||
import torch
|
||||
from transformers import AutoModelForSequenceClassification, AutoTokenizer
|
||||
TRANSFORMERS_AVAILABLE = True
|
||||
except ImportError:
|
||||
TRANSFORMERS_AVAILABLE = False
|
||||
@@ -163,7 +164,10 @@ class HuggingFaceReranker(BaseReranker):
|
||||
except Exception as e:
|
||||
# Fallback to original order if reranking fails
|
||||
logger.warning("HuggingFace reranking failed, falling back to original order: %s", e)
|
||||
fallback_docs = []
|
||||
for doc in documents:
|
||||
doc['rerank_score'] = 0.0
|
||||
fallback_doc = doc.copy()
|
||||
fallback_doc['rerank_score'] = 0.0
|
||||
fallback_docs.append(fallback_doc)
|
||||
final_top_k = top_k or self.config.top_k
|
||||
return documents[:final_top_k] if final_top_k else documents
|
||||
return fallback_docs[:final_top_k] if final_top_k else fallback_docs
|
||||
@@ -1,10 +1,13 @@
|
||||
import logging
|
||||
from typing import List, Dict, Any, Union
|
||||
from typing import Any, Dict, List, Union
|
||||
|
||||
import numpy as np
|
||||
|
||||
from mem0.reranker.base import BaseReranker
|
||||
from mem0.configs.rerankers.base import BaseRerankerConfig
|
||||
from mem0.configs.rerankers.sentence_transformer import SentenceTransformerRerankerConfig
|
||||
from mem0.configs.rerankers.sentence_transformer import (
|
||||
SentenceTransformerRerankerConfig,
|
||||
)
|
||||
from mem0.reranker.base import BaseReranker
|
||||
|
||||
try:
|
||||
from sentence_transformers import CrossEncoder
|
||||
@@ -108,7 +111,10 @@ class SentenceTransformerReranker(BaseReranker):
|
||||
except Exception as e:
|
||||
# Fallback to original order if reranking fails
|
||||
logger.warning("SentenceTransformer reranking failed, falling back to original order: %s", e)
|
||||
fallback_docs = []
|
||||
for doc in documents:
|
||||
doc['rerank_score'] = 0.0
|
||||
fallback_doc = doc.copy()
|
||||
fallback_doc['rerank_score'] = 0.0
|
||||
fallback_docs.append(fallback_doc)
|
||||
final_top_k = top_k or self.config.top_k
|
||||
return documents[:final_top_k] if final_top_k else documents
|
||||
return fallback_docs[:final_top_k] if final_top_k else fallback_docs
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import os
|
||||
from typing import List, Dict, Any
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from mem0.reranker.base import BaseReranker
|
||||
|
||||
@@ -95,7 +95,10 @@ class ZeroEntropyReranker(BaseReranker):
|
||||
except Exception as e:
|
||||
# Fallback to original order if reranking fails
|
||||
logger.warning("Zero Entropy reranking failed, falling back to original order: %s", e)
|
||||
fallback_docs = []
|
||||
for doc in documents:
|
||||
doc['rerank_score'] = 0.0
|
||||
fallback_doc = doc.copy()
|
||||
fallback_doc['rerank_score'] = 0.0
|
||||
fallback_docs.append(fallback_doc)
|
||||
final_top_k = top_k or self.config.top_k
|
||||
return documents[:final_top_k] if final_top_k else documents
|
||||
return fallback_docs[:final_top_k] if final_top_k else fallback_docs
|
||||
@@ -19,7 +19,9 @@ from mem0.configs.rerankers.base import BaseRerankerConfig
|
||||
from mem0.configs.rerankers.cohere import CohereRerankerConfig
|
||||
from mem0.configs.rerankers.huggingface import HuggingFaceRerankerConfig
|
||||
from mem0.configs.rerankers.llm import LLMRerankerConfig
|
||||
from mem0.configs.rerankers.sentence_transformer import SentenceTransformerRerankerConfig
|
||||
from mem0.configs.rerankers.sentence_transformer import (
|
||||
SentenceTransformerRerankerConfig,
|
||||
)
|
||||
from mem0.configs.rerankers.zero_entropy import ZeroEntropyRerankerConfig
|
||||
from mem0.embeddings.mock import MockEmbeddings
|
||||
|
||||
@@ -86,7 +88,7 @@ class LlmFactory:
|
||||
config = config_class(**kwargs)
|
||||
elif isinstance(config, dict):
|
||||
# Merge dict config with kwargs
|
||||
config.update(kwargs)
|
||||
config = {**config, **kwargs}
|
||||
config = config_class(**config)
|
||||
elif isinstance(config, BaseLlmConfig):
|
||||
# Convert base config to provider-specific config if needed
|
||||
|
||||
@@ -15,7 +15,6 @@ except ImportError:
|
||||
from mem0.vector_stores.base import VectorStoreBase
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
_DRIVER_METADATA = DriverInfo(name="Mem0", version=version("mem0ai"))
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ from mem0.configs.vector_stores.vertex_ai_vector_search import (
|
||||
from mem0.vector_stores.base import VectorStoreBase
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user