Migrate Chroma to CustomComponent (#784)
Migrating Chroma to CustomComponent
This commit is contained in:
commit
0168b5a626
8 changed files with 198 additions and 72 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
{
|
{
|
||||||
"name": "Langflow Demo Container",
|
"name": "Langflow Demo Container",
|
||||||
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||||
"image": "mcr.microsoft.com/devcontainers/python:3.10",
|
"image": "mcr.microsoft.com/devcontainers/python:1-3.10-bullseye",
|
||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/aws-cli:1": {},
|
"ghcr.io/devcontainers/features/aws-cli:1": {},
|
||||||
"ghcr.io/devcontainers/features/docker-in-docker": {},
|
"ghcr.io/devcontainers/features/docker-in-docker": {},
|
||||||
|
|
@ -16,7 +16,8 @@
|
||||||
"GitHub.copilot",
|
"GitHub.copilot",
|
||||||
"ms-python.python",
|
"ms-python.python",
|
||||||
"eamodio.gitlens",
|
"eamodio.gitlens",
|
||||||
"GitHub.vscode-pull-request-github"
|
"GitHub.vscode-pull-request-github",
|
||||||
|
"ms-azuretools.vscode-docker"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
// "forwardPorts": [],
|
// "forwardPorts": [],
|
||||||
|
|
||||||
// Use 'postCreateCommand' to run commands after the container is created.
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
"postCreateCommand": "make install_frontend && make install_backend",
|
"postCreateCommand": "make setup_devcontainer",
|
||||||
|
|
||||||
"containerEnv": {
|
"containerEnv": {
|
||||||
"POETRY_VIRTUALENVS_IN_PROJECT": "true"
|
"POETRY_VIRTUALENVS_IN_PROJECT": "true"
|
||||||
|
|
@ -31,9 +31,9 @@
|
||||||
"sourcery.sourcery",
|
"sourcery.sourcery",
|
||||||
"eamodio.gitlens",
|
"eamodio.gitlens",
|
||||||
"ms-vscode.makefile-tools",
|
"ms-vscode.makefile-tools",
|
||||||
"GitHub.vscode-pull-request-github"
|
"GitHub.vscode-pull-request-github",
|
||||||
]
|
"ms-azuretools.vscode-docker"
|
||||||
}
|
]}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||||
|
|
|
||||||
11
.gitattributes
vendored
11
.gitattributes
vendored
|
|
@ -7,10 +7,16 @@
|
||||||
*.h text
|
*.h text
|
||||||
*.py text
|
*.py text
|
||||||
*.js text
|
*.js text
|
||||||
*.ts text
|
|
||||||
*.jsx text
|
*.jsx text
|
||||||
|
*.ts text
|
||||||
|
*.tsx text
|
||||||
*.md text
|
*.md text
|
||||||
*.mdx text
|
*.mdx text
|
||||||
|
*.svg text
|
||||||
|
*.yml text
|
||||||
|
*.yaml text
|
||||||
|
*.Dockerfile text
|
||||||
|
Dockerfile text
|
||||||
|
|
||||||
# Declare files that will always have CRLF line endings on checkout.
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
*.sln text eol=crlf
|
*.sln text eol=crlf
|
||||||
|
|
@ -18,3 +24,6 @@
|
||||||
# Denote all files that are truly binary and should not be modified.
|
# Denote all files that are truly binary and should not be modified.
|
||||||
*.png binary
|
*.png binary
|
||||||
*.jpg binary
|
*.jpg binary
|
||||||
|
*.ico binary
|
||||||
|
*.gif binary
|
||||||
|
*.mp4 binary
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -253,3 +253,4 @@ langflow.db
|
||||||
.docusaurus/
|
.docusaurus/
|
||||||
|
|
||||||
/tmp/*
|
/tmp/*
|
||||||
|
src/backend/langflow/frontend/
|
||||||
|
|
|
||||||
6
Makefile
6
Makefile
|
|
@ -40,6 +40,12 @@ install_frontendc:
|
||||||
run_frontend:
|
run_frontend:
|
||||||
cd src/frontend && npm start
|
cd src/frontend && npm start
|
||||||
|
|
||||||
|
run_cli:
|
||||||
|
poetry run langflow --path src/frontend/build
|
||||||
|
|
||||||
|
run_cli_debug:
|
||||||
|
poetry run langflow --path src/frontend/build --log-level debug
|
||||||
|
|
||||||
setup_devcontainer:
|
setup_devcontainer:
|
||||||
make init
|
make init
|
||||||
make build_frontend
|
make build_frontend
|
||||||
|
|
|
||||||
109
src/backend/langflow/components/vectorstores/Chroma.py
Normal file
109
src/backend/langflow/components/vectorstores/Chroma.py
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
from typing import Optional, Union
|
||||||
|
from langflow import CustomComponent
|
||||||
|
|
||||||
|
from langchain.vectorstores import Chroma
|
||||||
|
from langchain.schema import Document
|
||||||
|
from langchain.vectorstores.base import VectorStore
|
||||||
|
from langchain.schema import BaseRetriever
|
||||||
|
from langchain.embeddings.base import Embeddings
|
||||||
|
import chromadb
|
||||||
|
|
||||||
|
|
||||||
|
class ChromaComponent(CustomComponent):
|
||||||
|
"""
|
||||||
|
A custom component for implementing a Vector Store using Chroma.
|
||||||
|
"""
|
||||||
|
|
||||||
|
display_name: str = "Chroma (Custom Component)"
|
||||||
|
description: str = "Implementation of Vector Store using Chroma"
|
||||||
|
documentation = "https://python.langchain.com/docs/integrations/vectorstores/chroma"
|
||||||
|
beta = True
|
||||||
|
|
||||||
|
def build_config(self):
|
||||||
|
"""
|
||||||
|
Builds the configuration for the component.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
- dict: A dictionary containing the configuration options for the component.
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
"collection_name": {"display_name": "Collection Name", "value": "langflow"},
|
||||||
|
"persist": {"display_name": "Persist"},
|
||||||
|
"persist_directory": {"display_name": "Persist Directory"},
|
||||||
|
"code": {"show": False, "display_name": "Code"},
|
||||||
|
"documents": {"display_name": "Documents", "is_list": True},
|
||||||
|
"embedding": {"display_name": "Embedding"},
|
||||||
|
"chroma_server_cors_allow_origins": {
|
||||||
|
"display_name": "Server CORS Allow Origins",
|
||||||
|
"advanced": True,
|
||||||
|
},
|
||||||
|
"chroma_server_host": {"display_name": "Server Host", "advanced": True},
|
||||||
|
"chroma_server_port": {"display_name": "Server Port", "advanced": True},
|
||||||
|
"chroma_server_grpc_port": {
|
||||||
|
"display_name": "Server gRPC Port",
|
||||||
|
"advanced": True,
|
||||||
|
},
|
||||||
|
"chroma_server_ssl_enabled": {
|
||||||
|
"display_name": "Server SSL Enabled",
|
||||||
|
"advanced": True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
def build(
|
||||||
|
self,
|
||||||
|
collection_name: str,
|
||||||
|
persist: bool,
|
||||||
|
chroma_server_ssl_enabled: bool,
|
||||||
|
persist_directory: Optional[str] = None,
|
||||||
|
embedding: Optional[Embeddings] = None,
|
||||||
|
documents: Optional[Document] = None,
|
||||||
|
chroma_server_cors_allow_origins: Optional[str] = None,
|
||||||
|
chroma_server_host: Optional[str] = None,
|
||||||
|
chroma_server_port: Optional[int] = None,
|
||||||
|
chroma_server_grpc_port: Optional[int] = None,
|
||||||
|
) -> Union[VectorStore, BaseRetriever]:
|
||||||
|
"""
|
||||||
|
Builds the Vector Store or BaseRetriever object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
- collection_name (str): The name of the collection.
|
||||||
|
- persist_directory (Optional[str]): The directory to persist the Vector Store to.
|
||||||
|
- chroma_server_ssl_enabled (bool): Whether to enable SSL for the Chroma server.
|
||||||
|
- persist (bool): Whether to persist the Vector Store or not.
|
||||||
|
- embedding (Optional[Embeddings]): The embeddings to use for the Vector Store.
|
||||||
|
- documents (Optional[Document]): The documents to use for the Vector Store.
|
||||||
|
- chroma_server_cors_allow_origins (Optional[str]): The CORS allow origins for the Chroma server.
|
||||||
|
- chroma_server_host (Optional[str]): The host for the Chroma server.
|
||||||
|
- chroma_server_port (Optional[int]): The port for the Chroma server.
|
||||||
|
- chroma_server_grpc_port (Optional[int]): The gRPC port for the Chroma server.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
- Union[VectorStore, BaseRetriever]: The Vector Store or BaseRetriever object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Chroma settings
|
||||||
|
chroma_settings = None
|
||||||
|
|
||||||
|
if chroma_server_host is not None:
|
||||||
|
chroma_settings = chromadb.config.Settings(
|
||||||
|
chroma_server_cors_allow_origins=chroma_server_cors_allow_origins
|
||||||
|
or None,
|
||||||
|
chroma_server_host=chroma_server_host,
|
||||||
|
chroma_server_port=chroma_server_port or None,
|
||||||
|
chroma_server_grpc_port=chroma_server_grpc_port or None,
|
||||||
|
chroma_server_ssl_enabled=chroma_server_ssl_enabled,
|
||||||
|
)
|
||||||
|
|
||||||
|
# If documents, then we need to create a Chroma instance using .from_documents
|
||||||
|
if documents is not None and embedding is not None:
|
||||||
|
return Chroma.from_documents(
|
||||||
|
documents=documents, # type: ignore
|
||||||
|
persist_directory=persist_directory if persist else None,
|
||||||
|
collection_name=collection_name,
|
||||||
|
embedding=embedding,
|
||||||
|
client_settings=chroma_settings,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Chroma(
|
||||||
|
persist_directory=persist_directory, client_settings=chroma_settings
|
||||||
|
)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue