## Using FastEmbed

You can use FastEmbed to run embedding models locally in Mem0. FastEmbed is an ONNX-based embedding library that runs efficiently on CPU without requiring a GPU or an external API key.

### Installation

FastEmbed is an optional dependency, so install it alongside Mem0.

**Python**
```bash
pip install fastembed
```

**TypeScript**
```bash
npm install fastembed
```

### Usage

**Python**
```python
import os
from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "your_api_key" # For LLM

config = {
    "embedder": {
        "provider": "fastembed",
        "config": {
            "model": "thenlper/gte-large"
        }
    }
}

m = Memory.from_config(config)
m.add([
    {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"},
    {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."},
    {"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."}
], user_id="john")
```

**TypeScript**
```typescript
import { Memory } from "mem0ai/oss";

const memory = new Memory({
  embedder: {
    provider: "fastembed",
    config: {
      model: "fast-bge-small-en-v1.5",
    },
  },
  llm: {
    provider: "openai",
    config: { apiKey: process.env.OPENAI_API_KEY }, // For fact extraction
  },
});

const messages = [
  { role: "user", content: "I'm planning to watch a movie tonight. Any recommendations?" },
  { role: "assistant", content: "How about thriller movies? They can be quite engaging." },
  { 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." },
];
await memory.add(messages, { userId: "john" });
```

**The Python and TypeScript SDKs default to different models.** Python defaults to `thenlper/gte-large` (1024 dimensions), while TypeScript defaults to `fast-bge-small-en-v1.5` (384 dimensions). The TypeScript package (`fastembed` on npm) ships a fixed set of ONNX models and does not include `thenlper/gte-large`. Because the two defaults produce vectors of different dimensions, do not point both SDKs at the same vector store collection unless you configure them to use the same model.

### Config

Here are the parameters available for configuring the FastEmbed embedder:

| Parameter           | Description                                                            | Default Value                           |
|---------------------|------------------------------------------------------------------------|-----------------------------------------|
| `model`             | The name of the FastEmbed model to use                                 | `thenlper/gte-large`                   |
| `embedding_dims`    | Dimensions of the embedding model (auto-derived from the model if not set) | `None`                                   |

| Parameter           | Description                                                            | Default Value                           |
|---------------------|------------------------------------------------------------------------|-----------------------------------------|
| `model`             | The FastEmbed model to use (see the supported list above)            | `fast-bge-small-en-v1.5`               |

The embedding dimension is detected automatically at startup, so you do not need to set it manually.
