Support for HF Inference (#2619)

This commit is contained in:
Dev Khant
2025-05-05 11:20:34 +05:30
committed by GitHub
parent e9f5a882f5
commit c81e2efbb0
4 changed files with 51 additions and 8 deletions

View File

@@ -25,12 +25,44 @@ m = Memory.from_config(config)
messages = [ messages = [
{"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"}, {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"},
{"role": "assistant", "content": "How about a thriller movies? They can be quite engaging."}, {"role": "assistant", "content": "How about a thriller movies? They can be quite engaging."},
{"role": "user", "content": "Im not a big fan of thriller movies but I love sci-fi movies."}, {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."},
{"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."} {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."}
] ]
m.add(messages, user_id="john") m.add(messages, user_id="john")
``` ```
### Using Text Embeddings Inference (TEI)
You can also use Hugging Face's Text Embeddings Inference service for faster and more efficient embeddings:
```python
import os
from mem0 import Memory
os.environ["OPENAI_API_KEY"] = "your_api_key" # For LLM
# Using HuggingFace Text Embeddings Inference API
config = {
"embedder": {
"provider": "huggingface",
"config": {
"huggingface_base_url": "http://localhost:3000/v1"
}
}
}
m = Memory.from_config(config)
m.add("This text will be embedded using the TEI service.", user_id="john")
```
To run the TEI service, you can use Docker:
```bash
docker run -d -p 3000:80 -v huggingfacetei:/data --platform linux/amd64 \
ghcr.io/huggingface/text-embeddings-inference:cpu-1.6 \
--model-id BAAI/bge-small-en-v1.5
```
### Config ### Config
Here are the parameters available for configuring Huggingface embedder: Here are the parameters available for configuring Huggingface embedder:
@@ -40,3 +72,4 @@ Here are the parameters available for configuring Huggingface embedder:
| `model` | The name of the model to use | `multi-qa-MiniLM-L6-cos-v1` | | `model` | The name of the model to use | `multi-qa-MiniLM-L6-cos-v1` |
| `embedding_dims` | Dimensions of the embedding model | `selected_model_dimensions` | | `embedding_dims` | Dimensions of the embedding model | `selected_model_dimensions` |
| `model_kwargs` | Additional arguments for the model | `None` | | `model_kwargs` | Additional arguments for the model | `None` |
| `huggingface_base_url` | URL to connect to Text Embeddings Inference (TEI) API | `None` |

View File

@@ -22,6 +22,7 @@ class BaseEmbedderConfig(ABC):
openai_base_url: Optional[str] = None, openai_base_url: Optional[str] = None,
# Huggingface specific # Huggingface specific
model_kwargs: Optional[dict] = None, model_kwargs: Optional[dict] = None,
huggingface_base_url: Optional[str] = None,
# AzureOpenAI specific # AzureOpenAI specific
azure_kwargs: Optional[AzureConfig] = {}, azure_kwargs: Optional[AzureConfig] = {},
http_client_proxies: Optional[Union[Dict, str]] = None, http_client_proxies: Optional[Union[Dict, str]] = None,
@@ -46,6 +47,8 @@ class BaseEmbedderConfig(ABC):
:type ollama_base_url: Optional[str], optional :type ollama_base_url: Optional[str], optional
:param model_kwargs: key-value arguments for the huggingface embedding model, defaults a dict inside init :param model_kwargs: key-value arguments for the huggingface embedding model, defaults a dict inside init
:type model_kwargs: Optional[Dict[str, Any]], defaults a dict inside init :type model_kwargs: Optional[Dict[str, Any]], defaults a dict inside init
:param huggingface_base_url: Huggingface base URL to be use, defaults to None
:type huggingface_base_url: Optional[str], optional
:param openai_base_url: Openai base URL to be use, defaults to "https://api.openai.com/v1" :param openai_base_url: Openai base URL to be use, defaults to "https://api.openai.com/v1"
:type openai_base_url: Optional[str], optional :type openai_base_url: Optional[str], optional
:param azure_kwargs: key-value arguments for the AzureOpenAI embedding model, defaults a dict inside init :param azure_kwargs: key-value arguments for the AzureOpenAI embedding model, defaults a dict inside init
@@ -77,7 +80,7 @@ class BaseEmbedderConfig(ABC):
# Huggingface specific # Huggingface specific
self.model_kwargs = model_kwargs or {} self.model_kwargs = model_kwargs or {}
self.huggingface_base_url = huggingface_base_url
# AzureOpenAI specific # AzureOpenAI specific
self.azure_kwargs = AzureConfig(**azure_kwargs) or {} self.azure_kwargs = AzureConfig(**azure_kwargs) or {}

View File

@@ -5,6 +5,7 @@ logging.getLogger("transformers").setLevel(logging.WARNING)
logging.getLogger("sentence_transformers").setLevel(logging.WARNING) logging.getLogger("sentence_transformers").setLevel(logging.WARNING)
logging.getLogger("huggingface_hub").setLevel(logging.WARNING) logging.getLogger("huggingface_hub").setLevel(logging.WARNING)
from openai import OpenAI
from sentence_transformers import SentenceTransformer from sentence_transformers import SentenceTransformer
from mem0.configs.embeddings.base import BaseEmbedderConfig from mem0.configs.embeddings.base import BaseEmbedderConfig
@@ -15,6 +16,9 @@ class HuggingFaceEmbedding(EmbeddingBase):
def __init__(self, config: Optional[BaseEmbedderConfig] = None): def __init__(self, config: Optional[BaseEmbedderConfig] = None):
super().__init__(config) super().__init__(config)
if config.huggingface_base_url:
self.client = OpenAI(base_url=config.huggingface_base_url)
else:
self.config.model = self.config.model or "multi-qa-MiniLM-L6-cos-v1" self.config.model = self.config.model or "multi-qa-MiniLM-L6-cos-v1"
self.model = SentenceTransformer(self.config.model, **self.config.model_kwargs) self.model = SentenceTransformer(self.config.model, **self.config.model_kwargs)
@@ -31,4 +35,7 @@ class HuggingFaceEmbedding(EmbeddingBase):
Returns: Returns:
list: The embedding vector. list: The embedding vector.
""" """
if self.config.huggingface_base_url:
return self.client.embeddings.create(input=text, model="tei").data[0].embedding
else:
return self.model.encode(text, convert_to_numpy=True).tolist() return self.model.encode(text, convert_to_numpy=True).tolist()

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "mem0ai" name = "mem0ai"
version = "0.1.96" version = "0.1.97"
description = "Long-term memory for AI Agents" description = "Long-term memory for AI Agents"
authors = ["Mem0 <founders@mem0.ai>"] authors = ["Mem0 <founders@mem0.ai>"]
exclude = [ exclude = [