ChromaDB embedding error solution
2025-07-293 turns9,677 charsgpt-4-1-mini, gpt-4o⑂ 1 fork(s)
Summary
User encountered a ChromaDB error requiring an embedding function and sought a solution to fix the issue.
Messages
⑂ thread forked here
Prepared: 20250711_124457_AI_in_Creative_Industries.md (3 chunks)
Error processing output/2025/07/20250711_124457_AI_in_Creative_Industries.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250703_095259_Quantitative_Persona_vs_MCP.md (7 chunks)
Error processing output/2025/07/20250703_095259_Quantitative_Persona_vs_MCP.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250712_043845_Retail_Analytics_Dashboard.md (7 chunks)
Error processing output/2025/07/20250712_043845_Retail_Analytics_Dashboard.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250714_090204_Glitch_Art_mit_Expressionismus.md (2 chunks)
Error processing output/2025/07/20250714_090204_Glitch_Art_mit_Expressionismus.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250706_162332_Digital_Product_Ideas_LLM.md (5 chunks)
Error processing output/2025/07/20250706_162332_Digital_Product_Ideas_LLM.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250708_115701_Netlify_Build_Errors.md (12 chunks)
Error processing output/2025/07/20250708_115701_Netlify_Build_Errors.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250714_152322_Productivity_Update_for_Psychi.md (4 chunks)
Error processing output/2025/07/20250714_152322_Productivity_Update_for_Psychi.md: You must provide an embedding function to compute embeddings.https://docs.trychroma.com/guides/embeddings in add.
Prepared: 20250726_062137_Personality-driven_writing_ana.md (5 chunks)
^CTraceback (most recent call last):
File "/Users/danielkliewer/agentsearch01/agent_search.py", line 1164, in <module>
main()
~~~~^^
File "/Users/danielkliewer/agentsearch01/agent_search.py", line 1121, in main
search_system.process_files_batch(batch_size=args.batch_size)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/danielkliewer/agentsearch01/agent_search.py", line 798, in process_files_batch
self.collection.add(
~~~~~~~~~~~~~~~~~~~^
documents=batch_documents,
^^^^^^^^^^^^^^^^^^^^^^^^^^
metadatas=batch_metadatas,
^^^^^^^^^^^^^^^^^^^^^^^^^^
ids=batch_ids
^^^^^^^^^^^^^
)
^
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/models/Collection.py", line 80, in add
add_request = self._validate_and_prepare_add_request(
ids=ids,
...<4 lines>...
uris=uris,
)
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/models/CollectionCommon.py", line 95, in wrapper
return func(self, *args, **kwargs)
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/models/CollectionCommon.py", line 219, in _validate_and_prepare_add_request
validate_insert_record_set(record_set=add_records)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/types.py", line 314, in validate_insert_record_set
validate_metadatas(record_set["metadatas"])
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/types.py", line 791, in validate_metadatas
validate_metadata(metadata)
~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/danielkliewer/agentsearch01/venv/lib/python3.13/site-packages/chromadb/api/types.py", line 754, in validate_metadata
if not isinstance(value, bool) and not isinstance(
~~~~~~~~~~^
value, (str, int, float, type(None))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
KeyboardInterrupt
(venv) danielkliewer@Daniels-MacBook-Pro agentsearch01 %
You're getting this error from ChromaDB:
> `You must provide an embedding function to compute embeddings.`
This means you haven’t passed an **embedding function** when calling `collection.add(...)`.
---
### ✅ Solution
When you use a **ChromaDB `Collection`**, and you try to `.add()` documents **without passing explicit embeddings**, Chroma needs to know **how to generate them**.
You must either:
1. **Pass the `embedding_function` when creating the client**, or
2. **Provide embeddings manually in `collection.add(embeddings=...)`**.
---
### ✅ Fix Option 1: Add an embedding function on client/collection creation
If you’re using LangChain’s embedding wrapper (e.g., `OllamaEmbeddings`, `HuggingFaceEmbeddings`, etc.), do something like this:
```python
from langchain_community.embeddings import OllamaEmbeddings
from chromadb import PersistentClient
embedding_function = OllamaEmbeddings(model="nomic-embed-text")
client = PersistentClient(path="./chroma_db")
collection = client.get_or_create_collection(
name="your_collection_name",
embedding_function=embedding_function # <- This is the key line
)
```
If you're not using LangChain, you can provide a **custom embedding function**:
```python
def embed_texts(texts: List[str]) -> List[List[float]]:
# return your own list of vector embeddings here
...
```
Then pass:
```python
collection = client.get_or_create_collection(
name="your_collection",
embedding_function=embed_texts
)
```
---
### ✅ Fix Option 2: Precompute and pass `embeddings` manually
If you don't want Chroma to call the embedding function for you:
```python
collection.add(
documents=your_docs,
metadatas=your_metadatas,
ids=your_ids,
embeddings=precomputed_embeddings # <- must be List[List[float]]
)
```
---
### 🧠 Final Tip
To confirm whether you're using the `embedding_function`, print it out:
```python
print(collection._embedding_function)
```
If it’s `None`, Chroma can’t embed your docs, and you’ll get the exact error you're seeing.
---
Let me know if you're using a specific embedding model or stack (e.g., Ollama locally, Hugging Face Transformers, etc.), and I can tailor the fix.
gpt-4o
The main issues from your error messages and traceback boil down to:
### 1. **Missing embedding function in your ChromaDB `add` calls**
> `You must provide an embedding function to compute embeddings.`
ChromaDB requires an embedding function or precomputed embeddings when you add documents to a collection. The error says you are calling `.add()` without providing embeddings or a function that generates embeddings.
- You need to instantiate your collection with an embedding function or provide embeddings explicitly.
- If you have raw documents/text, you must embed them before adding.
- See [ChromaDB embedding guide](https://docs.trychroma.com/guides/embeddings).
### 2. **Metadata validation failure**
From the stack trace, the error appears while validating metadata in your `add` call:
```python
if not isinstance(value, bool) and not isinstance(value, (str, int, float, type(None))):
```
This suggests that some metadata values have invalid types. Valid types for metadata values are:
- `bool`
- `str`
- `int`
- `float`
- `None`
Check your metadata dictionaries to make sure all values are one of these types. If you have lists, dicts, or other objects as metadata values, you will get this error.
---
# How to fix both:
### A. Fix embedding function usage
If you are using ChromaDB with Python, a minimal example for setting an embedding function:
```python
from chromadb.config import Settings
import chromadb
# Example embedding function (must return vector list)
def dummy_embed(texts):
return [[0.0] * 768 for _ in texts] # replace with real embedding calls
client = chromadb.Client(Settings(chroma_db_impl="duckdb+parquet", persist_directory="./chroma_db"))
collection = client.get_or_create_collection(
name="my_collection",
embedding_function=dummy_embed
)
```
Then when you add documents:
```python
collection.add(
documents=["My doc 1", "My doc 2"],
metadatas=[{"source": "doc1"}, {"source": "doc2"}],
ids=["doc1", "doc2"],
)
```
- If you do not specify `embedding_function` at collection creation, you must provide precomputed embeddings during `.add()` like:
```python
embeddings = my_embedding_model.encode(["My doc 1", "My doc 2"])
collection.add(
documents=["My doc 1", "My doc 2"],
metadatas=[{"source": "doc1"}, {"source": "doc2"}],
ids=["doc1", "doc2"],
embeddings=embeddings
)
```
### B. Fix metadata types
Review your code that creates `batch_metadatas`. Make sure every metadata dictionary contains only primitive types (`bool`, `str`, `int`, `float`, or `None`).
Example correction:
```python
batch_metadatas = [
{
"filename": "file1.md",
"chunk_index": 0,
"is_processed": True,
# "tags": ["tag1", "tag2"] # This would be invalid if tags is a list.
# Instead store as a string or remove
"tags": "tag1,tag2"
},
...
]
```
---
# Summary checklist
1. Ensure your collection is created with a valid embedding function or provide embeddings on `.add()`.
2. Validate all metadata values are `bool`, `str`, `int`, `float`, or `None`. No lists/dicts.
3. If needed, convert any complex metadata fields (lists, dicts) into JSON strings or remove them.
---
If you want, share your snippet for how you create your Chroma client and add documents, and I can help rewrite it to fix these issues.
gpt-4-1-mini