add_images() — langchain Function Reference
Architecture documentation for the add_images() function in vectorstores.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 9ee5bc10_c14a_9726_0a8f_1e24d88c9d8a["add_images()"] babbef04_3a0c_25f4_58a8_9d3209d5867e["Chroma"] 9ee5bc10_c14a_9726_0a8f_1e24d88c9d8a -->|defined in| babbef04_3a0c_25f4_58a8_9d3209d5867e 60197b67_6ad3_4867_87c9_85ac6103c02e["encode_image()"] 9ee5bc10_c14a_9726_0a8f_1e24d88c9d8a -->|calls| 60197b67_6ad3_4867_87c9_85ac6103c02e style 9ee5bc10_c14a_9726_0a8f_1e24d88c9d8a fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/partners/chroma/langchain_chroma/vectorstores.py lines 509–595
def add_images(
self,
uris: list[str],
metadatas: list[dict] | None = None,
ids: list[str] | None = None,
) -> list[str]:
"""Run more images through the embeddings and add to the `VectorStore`.
Args:
uris: File path to the image.
metadatas: Optional list of metadatas.
When querying, you can filter on this metadata.
ids: Optional list of IDs. (Items without IDs will be assigned UUIDs)
Returns:
List of IDs of the added images.
Raises:
ValueError: When metadata is incorrect.
"""
# Map from uris to b64 encoded strings
b64_texts = [self.encode_image(uri=uri) for uri in uris]
# Populate IDs
if ids is None:
ids = [str(uuid.uuid4()) for _ in uris]
else:
ids = [id_ if id_ is not None else str(uuid.uuid4()) for id_ in ids]
embeddings = None
# Set embeddings
if self._embedding_function is not None and hasattr(
self._embedding_function,
"embed_image",
):
embeddings = self._embedding_function.embed_image(uris=uris)
if metadatas:
# fill metadatas with empty dicts if somebody
# did not specify metadata for all images
length_diff = len(uris) - len(metadatas)
if length_diff:
metadatas = metadatas + [{}] * length_diff
empty_ids = []
non_empty_ids = []
for idx, m in enumerate(metadatas):
if m:
non_empty_ids.append(idx)
else:
empty_ids.append(idx)
if non_empty_ids:
metadatas = [metadatas[idx] for idx in non_empty_ids]
images_with_metadatas = [b64_texts[idx] for idx in non_empty_ids]
embeddings_with_metadatas = (
[embeddings[idx] for idx in non_empty_ids] if embeddings else None
)
ids_with_metadata = [ids[idx] for idx in non_empty_ids]
try:
self._collection.upsert(
metadatas=metadatas, # type: ignore[arg-type]
embeddings=embeddings_with_metadatas, # type: ignore[arg-type]
documents=images_with_metadatas,
ids=ids_with_metadata,
)
except ValueError as e:
if "Expected metadata value to be" in str(e):
msg = (
"Try filtering complex metadata using "
"langchain_community.vectorstores.utils.filter_complex_metadata."
)
raise ValueError(e.args[0] + "\n\n" + msg) from e
raise e
if empty_ids:
images_without_metadatas = [b64_texts[j] for j in empty_ids]
embeddings_without_metadatas = (
[embeddings[j] for j in empty_ids] if embeddings else None
)
ids_without_metadatas = [ids[j] for j in empty_ids]
self._collection.upsert(
embeddings=embeddings_without_metadatas,
documents=images_without_metadatas,
ids=ids_without_metadatas,
)
else:
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does add_images() do?
add_images() is a function in the langchain codebase, defined in libs/partners/chroma/langchain_chroma/vectorstores.py.
Where is add_images() defined?
add_images() is defined in libs/partners/chroma/langchain_chroma/vectorstores.py at line 509.
What does add_images() call?
add_images() calls 1 function(s): encode_image.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free