---
title: LLMs and Embeddings
desc: "A practical guide to configuring and using Large Language Models (LLM) and Embedders in **MemOS**."
---
## Overview
MemOS decouples **model logic** from **runtime config** via two Pydantic factories:
| Factory | Produces | Typical backends |
|---------|----------|------------------|
| `LLMFactory` | Chat model | `ollama`, `openai`, `azure`, `qwen`, `deepseek`, `huggingface`, `huggingface_singleton`, `vllm`, `openai_new` |
| `EmbedderFactory` | Text embedder | `ollama`, `sentence_transformer`, `ark`, `universal_api` |
Both factories accept a `*_ConfigFactory.model_validate(...)` blob, so you can switch provider with a single `backend=` swap.
## LLM Module
### Supported LLM Backends
| Backend | Notes | Example model_name_or_path |
|---|---|---|
| `ollama` | Local Ollama server | `qwen3:0.6b` |
| `openai` | OpenAI-compatible Chat Completions | `gpt-4.1-nano` |
| `azure` | Azure OpenAI Chat Completions | `` |
| `qwen` | DashScope OpenAI-compatible API | `qwen-plus` |
| `deepseek` | DeepSeek OpenAI-compatible API | `deepseek-chat` / `deepseek-reasoner` |
| `huggingface` | Local transformers pipeline | `Qwen/Qwen3-1.7B` |
| `huggingface_singleton` | Same as `huggingface` + singleton reuse | `Qwen/Qwen3-1.7B` |
| `vllm` | OpenAI-compatible vLLM server | `Qwen/Qwen2.5-7B-Instruct` |
| `openai_new` | OpenAI Responses API wrapper | `gpt-4.1` |
### LLM Config Schema
Common fields:
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `model_name_or_path` | str | – | Model id or local tag |
| `temperature` | float | 0.7 |
| `max_tokens` | int | 8192 |
| `top_p` / `top_k` | float / int | 0.95 / 50 |
| *API‑specific* | e.g. `api_key`, `api_base` | – | OpenAI‑compatible creds |
| `remove_think_prefix` | bool | False | Remove content within think tags from the generated text |
### Factory Usage
```python
from memos.configs.llm import LLMConfigFactory
from memos.llms.factory import LLMFactory
cfg = LLMConfigFactory.model_validate({
"backend": "ollama",
"config": {"model_name_or_path": "qwen3:0.6b"}
})
llm = LLMFactory.from_config(cfg)
```
### LLM Core APIs
| Method | Purpose |
|--------|---------|
| `generate(messages: list)` | Return full string response |
| `generate_stream(messages)` | Yield streaming chunks|
### Streaming & CoT
```python
messages = [{"role": "user", "content": "Let’s think step by step: …"}]
for chunk in llm.generate_stream(messages):
print(chunk, end="")
```
::note
**Full code**
Find all scenarios in `examples/basic_modules/llm.py`.
::
### Performance Tips
- Use `qwen3:0.6b` for <2 GB footprint when prototyping locally.
- Combine with KV Cache (see *KVCacheMemory* doc) to cut TTFT .
## Embedding Module
### Supported Embedder Backends
| Backend | Notes | Example model_name_or_path |
|---|---|---|
| `ollama` | Local Ollama server | `nomic-embed-text:latest` |
| `sentence_transformer` | Local sentence-transformers | `nomic-ai/nomic-embed-text-v1.5` |
| `ark` | Volcano Engine Ark embeddings | `` |
| `universal_api` | Universal provider wrapper (e.g. OpenAI) | `text-embedding-3-large` |
### Embedder Config Schema
Shared keys: `model_name_or_path`, optional API creds (`api_key`, `base_url`), etc.
### Factory Usage
```python
from memos.configs.embedder import EmbedderConfigFactory
from memos.embedders.factory import EmbedderFactory
cfg = EmbedderConfigFactory.model_validate({
"backend": "ollama",
"config": {"model_name_or_path": "nomic-embed-text:latest"}
})
embedder = EmbedderFactory.from_config(cfg)
```