Merge branch 'two_edges' of https://github.com/langflow-ai/langflow into two_edges
This commit is contained in:
commit
cd49b2e55a
37 changed files with 54 additions and 173 deletions
18
poetry.lock
generated
18
poetry.lock
generated
|
|
@ -4353,6 +4353,22 @@ httpx-sse = ">=0.3.1,<1"
|
||||||
langchain-core = ">=0.2.0,<0.3"
|
langchain-core = ">=0.2.0,<0.3"
|
||||||
tokenizers = ">=0.15.1,<1"
|
tokenizers = ">=0.15.1,<1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "langchain-mongodb"
|
||||||
|
version = "0.1.6"
|
||||||
|
description = "An integration package connecting MongoDB and LangChain"
|
||||||
|
optional = false
|
||||||
|
python-versions = "<4.0,>=3.8.1"
|
||||||
|
files = [
|
||||||
|
{file = "langchain_mongodb-0.1.6-py3-none-any.whl", hash = "sha256:ba5e1e388131ae00e8fcd39c4b38ce42c29f00c4bc39c58023b354b597ffa8df"},
|
||||||
|
{file = "langchain_mongodb-0.1.6.tar.gz", hash = "sha256:a7a6b66d5270d6f8732c4e848f9a3742bbd4485c8829a2d629332ee683b936d1"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
langchain-core = ">=0.1.46,<0.3"
|
||||||
|
numpy = ">=1,<2"
|
||||||
|
pymongo = ">=4.6.1,<5.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "langchain-openai"
|
name = "langchain-openai"
|
||||||
version = "0.1.8"
|
version = "0.1.8"
|
||||||
|
|
@ -10610,4 +10626,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.10,<3.13"
|
python-versions = ">=3.10,<3.13"
|
||||||
content-hash = "65701c22864b203bdeb0fbdd0e51d0b58855e77aa65e49df3dad2c9ebb04c976"
|
content-hash = "332baeb07342a5ad1367ce6b13a87bd96504f628d2e91e33dfda1a8317b2de13"
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ gitpython = "^3.1.43"
|
||||||
cassio = { extras = ["cassio"], version = "^0.1.7", optional = true }
|
cassio = { extras = ["cassio"], version = "^0.1.7", optional = true }
|
||||||
unstructured = {extras = ["docx", "md", "pptx"], version = "^0.14.4"}
|
unstructured = {extras = ["docx", "md", "pptx"], version = "^0.14.4"}
|
||||||
langchain-aws = "^0.1.6"
|
langchain-aws = "^0.1.6"
|
||||||
|
langchain-mongodb = "^0.1.6"
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ async def retrieve_vertices_order(
|
||||||
run_id = uuid.uuid4()
|
run_id = uuid.uuid4()
|
||||||
graph.set_run_id(run_id)
|
graph.set_run_id(run_id)
|
||||||
vertices_to_run = list(graph.vertices_to_run) + get_top_level_vertices(graph, graph.vertices_to_run)
|
vertices_to_run = list(graph.vertices_to_run) + get_top_level_vertices(graph, graph.vertices_to_run)
|
||||||
await chat_service.set_cache(flow_id, graph)
|
await chat_service.set_cache(str(flow_id), graph)
|
||||||
return VerticesOrderResponse(ids=first_layer, run_id=run_id, vertices_to_run=vertices_to_run)
|
return VerticesOrderResponse(ids=first_layer, run_id=run_id, vertices_to_run=vertices_to_run)
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import warnings
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
from langchain_core.language_models.llms import LLM
|
from langchain_core.language_models.llms import LLM
|
||||||
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
|
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.field_typing import LanguageModel
|
from langflow.field_typing import LanguageModel
|
||||||
|
|
@ -120,7 +120,7 @@ class LCModelComponent(Component):
|
||||||
def get_chat_result(
|
def get_chat_result(
|
||||||
self, runnable: LanguageModel, stream: bool, input_value: str | Message, system_message: Optional[str] = None
|
self, runnable: LanguageModel, stream: bool, input_value: str | Message, system_message: Optional[str] = None
|
||||||
):
|
):
|
||||||
messages: list[Union[HumanMessage, SystemMessage]] = []
|
messages: list[Union[BaseMessage]] = []
|
||||||
if not input_value and not system_message:
|
if not input_value and not system_message:
|
||||||
raise ValueError("The message you want to send to the model is empty.")
|
raise ValueError("The message you want to send to the model is empty.")
|
||||||
if system_message:
|
if system_message:
|
||||||
|
|
@ -136,7 +136,7 @@ class LCModelComponent(Component):
|
||||||
messages.append(input_value.to_lc_message())
|
messages.append(input_value.to_lc_message())
|
||||||
else:
|
else:
|
||||||
messages.append(HumanMessage(content=input_value))
|
messages.append(HumanMessage(content=input_value))
|
||||||
inputs = messages or {}
|
inputs: Union[list, dict] = messages or {}
|
||||||
try:
|
try:
|
||||||
if stream:
|
if stream:
|
||||||
return runnable.stream(inputs)
|
return runnable.stream(inputs)
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from langchain_community.embeddings import BedrockEmbeddings
|
from langchain_community.embeddings import BedrockEmbeddings
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import Embeddings
|
from langflow.field_typing import Embeddings
|
||||||
from langflow.io import DropdownInput, Output, SecretStrInput, TextInput
|
from langflow.io import DropdownInput, Output, TextInput
|
||||||
|
|
||||||
|
|
||||||
class AmazonBedrockEmbeddingsComponent(LCModelComponent):
|
class AmazonBedrockEmbeddingsComponent(LCModelComponent):
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
from typing import Optional
|
|
||||||
from langchain_openai import AzureOpenAIEmbeddings
|
from langchain_openai import AzureOpenAIEmbeddings
|
||||||
from pydantic.v1 import SecretStr
|
from pydantic.v1 import SecretStr
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from langchain_community.embeddings.cohere import CohereEmbeddings
|
||||||
|
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import Embeddings
|
from langflow.field_typing import Embeddings
|
||||||
from langflow.io import BoolInput, DictInput, DropdownInput, FloatInput, IntInput, Output, SecretStrInput, TextInput
|
from langflow.io import DropdownInput, FloatInput, IntInput, Output, SecretStrInput, TextInput
|
||||||
|
|
||||||
|
|
||||||
class CohereEmbeddingsComponent(LCModelComponent):
|
class CohereEmbeddingsComponent(LCModelComponent):
|
||||||
|
|
@ -34,7 +34,7 @@ class CohereEmbeddingsComponent(LCModelComponent):
|
||||||
]
|
]
|
||||||
|
|
||||||
def build_embeddings(self) -> Embeddings:
|
def build_embeddings(self) -> Embeddings:
|
||||||
return CohereEmbeddings(
|
return CohereEmbeddings( # type: ignore
|
||||||
cohere_api_key=self.cohere_api_key,
|
cohere_api_key=self.cohere_api_key,
|
||||||
model=self.model,
|
model=self.model,
|
||||||
truncate=self.truncate,
|
truncate=self.truncate,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
from typing import Dict, Optional
|
|
||||||
|
|
||||||
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
|
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
|
||||||
|
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
from typing import Dict, Optional
|
|
||||||
|
|
||||||
from langchain_community.embeddings.huggingface import HuggingFaceInferenceAPIEmbeddings
|
from langchain_community.embeddings.huggingface import HuggingFaceInferenceAPIEmbeddings
|
||||||
from pydantic.v1.types import SecretStr
|
from pydantic.v1.types import SecretStr
|
||||||
|
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import Embeddings
|
from langflow.field_typing import Embeddings
|
||||||
from langflow.io import BoolInput, DictInput, FloatInput, Output, SecretStrInput, TextInput
|
from langflow.io import BoolInput, DictInput, Output, SecretStrInput, TextInput
|
||||||
|
|
||||||
|
|
||||||
class HuggingFaceInferenceAPIEmbeddingsComponent(LCModelComponent):
|
class HuggingFaceInferenceAPIEmbeddingsComponent(LCModelComponent):
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from langchain_community.embeddings import OllamaEmbeddings
|
from langchain_community.embeddings import OllamaEmbeddings
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import Embeddings
|
from langflow.field_typing import Embeddings
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
from typing import List, Optional
|
|
||||||
|
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import Embeddings
|
from langflow.field_typing import Embeddings
|
||||||
from langflow.io import BoolInput, DictInput, FileInput, FloatInput, IntInput, Output, TextInput
|
from langflow.io import BoolInput, DictInput, FileInput, FloatInput, IntInput, Output, TextInput
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class EmbedComponent(CustomComponent):
|
||||||
def build_config(self):
|
def build_config(self):
|
||||||
return {"texts": {"display_name": "Texts"}, "embbedings": {"display_name": "Embeddings"}}
|
return {"texts": {"display_name": "Texts"}, "embbedings": {"display_name": "Embeddings"}}
|
||||||
|
|
||||||
def build(self, texts: list[str], embbedings: Embeddings) -> Embeddings:
|
def build(self, texts: list[str], embbedings: Embeddings) -> Data:
|
||||||
vectors = Data(vector=embbedings.embed_documents(texts))
|
vectors = Data(vector=embbedings.embed_documents(texts))
|
||||||
self.status = vectors
|
self.status = vectors
|
||||||
return vectors
|
return vectors
|
||||||
|
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from langchain_anthropic import ChatAnthropic
|
|
||||||
from pydantic.v1.types import SecretStr
|
|
||||||
|
|
||||||
from langflow.field_typing import LanguageModel
|
|
||||||
|
|
||||||
|
|
||||||
class AnthropicLLM(CustomComponent):
|
|
||||||
display_name: str = "Anthropic"
|
|
||||||
description: str = "Generate text using Anthropic Chat&Completion LLMs."
|
|
||||||
icon = "Anthropic"
|
|
||||||
|
|
||||||
field_order = [
|
|
||||||
"model",
|
|
||||||
"anthropic_api_key",
|
|
||||||
"max_tokens",
|
|
||||||
"temperature",
|
|
||||||
"anthropic_api_url",
|
|
||||||
]
|
|
||||||
|
|
||||||
def build_config(self):
|
|
||||||
return {
|
|
||||||
"model": {
|
|
||||||
"display_name": "Model Name",
|
|
||||||
"options": [
|
|
||||||
"claude-3-opus-20240229",
|
|
||||||
"claude-3-sonnet-20240229",
|
|
||||||
"claude-3-haiku-20240307",
|
|
||||||
"claude-2.1",
|
|
||||||
"claude-2.0",
|
|
||||||
"claude-instant-1.2",
|
|
||||||
"claude-instant-1",
|
|
||||||
],
|
|
||||||
"info": "Name of the model to use.",
|
|
||||||
"required": True,
|
|
||||||
"value": "claude-3-opus-20240229",
|
|
||||||
},
|
|
||||||
"anthropic_api_key": {
|
|
||||||
"display_name": "Anthropic API Key",
|
|
||||||
"required": True,
|
|
||||||
"password": True,
|
|
||||||
"info": "Your Anthropic API key.",
|
|
||||||
},
|
|
||||||
"max_tokens": {
|
|
||||||
"display_name": "Max Tokens",
|
|
||||||
"advanced": True,
|
|
||||||
"info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
|
|
||||||
},
|
|
||||||
"temperature": {
|
|
||||||
"display_name": "Temperature",
|
|
||||||
"field_type": "float",
|
|
||||||
"value": 0.1,
|
|
||||||
},
|
|
||||||
"anthropic_api_url": {
|
|
||||||
"display_name": "Anthropic API URL",
|
|
||||||
"advanced": True,
|
|
||||||
"info": "Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.",
|
|
||||||
},
|
|
||||||
"code": {"show": False},
|
|
||||||
}
|
|
||||||
|
|
||||||
def build(
|
|
||||||
self,
|
|
||||||
model: str,
|
|
||||||
anthropic_api_key: Optional[str] = None,
|
|
||||||
max_tokens: Optional[int] = 1000,
|
|
||||||
temperature: Optional[float] = None,
|
|
||||||
anthropic_api_url: Optional[str] = None,
|
|
||||||
) -> LanguageModel:
|
|
||||||
# Set default API endpoint if not provided
|
|
||||||
if not anthropic_api_url:
|
|
||||||
anthropic_api_url = "https://api.anthropic.com"
|
|
||||||
|
|
||||||
try:
|
|
||||||
output = ChatAnthropic(
|
|
||||||
model_name=model,
|
|
||||||
anthropic_api_key=(SecretStr(anthropic_api_key) if anthropic_api_key else None),
|
|
||||||
max_tokens_to_sample=max_tokens, # type: ignore
|
|
||||||
temperature=temperature,
|
|
||||||
anthropic_api_url=anthropic_api_url,
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
raise ValueError("Could not connect to Anthropic API.") from e
|
|
||||||
|
|
||||||
return output
|
|
||||||
|
|
@ -2,7 +2,7 @@ from langchain_aws import ChatBedrock
|
||||||
|
|
||||||
from langflow.base.constants import STREAM_INFO_TEXT
|
from langflow.base.constants import STREAM_INFO_TEXT
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import LanguageModel, Text
|
from langflow.field_typing import LanguageModel
|
||||||
from langflow.io import BoolInput, DictInput, DropdownInput, MessageInput, Output, StrInput
|
from langflow.io import BoolInput, DictInput, DropdownInput, MessageInput, Output, StrInput
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -78,7 +78,7 @@ class AmazonBedrockComponent(LCModelComponent):
|
||||||
cache = self.cache
|
cache = self.cache
|
||||||
stream = self.stream
|
stream = self.stream
|
||||||
try:
|
try:
|
||||||
output = ChatBedrock(
|
output = ChatBedrock( # type: ignore
|
||||||
credentials_profile_name=credentials_profile_name,
|
credentials_profile_name=credentials_profile_name,
|
||||||
model_id=model_id,
|
model_id=model_id,
|
||||||
region_name=region_name,
|
region_name=region_name,
|
||||||
|
|
|
||||||
|
|
@ -98,9 +98,9 @@ class AnthropicModelComponent(LCModelComponent):
|
||||||
try:
|
try:
|
||||||
from anthropic import BadRequestError
|
from anthropic import BadRequestError
|
||||||
except ImportError:
|
except ImportError:
|
||||||
return
|
return None
|
||||||
if isinstance(exception, BadRequestError):
|
if isinstance(exception, BadRequestError):
|
||||||
message = exception.body.get("error", {}).get("message") # type: ignore
|
message = exception.body.get("error", {}).get("message") # type: ignore
|
||||||
if message:
|
if message:
|
||||||
return message
|
return message
|
||||||
return
|
return None
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from pydantic.v1 import SecretStr
|
||||||
|
|
||||||
from langflow.base.constants import STREAM_INFO_TEXT
|
from langflow.base.constants import STREAM_INFO_TEXT
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import LanguageModel, Text
|
from langflow.field_typing import LanguageModel
|
||||||
from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, MessageInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, MessageInput, Output, SecretStrInput, StrInput
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from pydantic.v1 import SecretStr
|
||||||
|
|
||||||
from langflow.base.constants import STREAM_INFO_TEXT
|
from langflow.base.constants import STREAM_INFO_TEXT
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import LanguageModel, Text
|
from langflow.field_typing import LanguageModel
|
||||||
from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, MessageInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, DropdownInput, FloatInput, IntInput, MessageInput, Output, SecretStrInput, StrInput
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
|
||||||
model_kwargs = self.model_kwargs or {}
|
model_kwargs = self.model_kwargs or {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
llm = HuggingFaceEndpoint(
|
llm = HuggingFaceEndpoint( # type: ignore
|
||||||
endpoint_url=endpoint_url,
|
endpoint_url=endpoint_url,
|
||||||
task=task,
|
task=task,
|
||||||
huggingfacehub_api_token=huggingfacehub_api_token,
|
huggingfacehub_api_token=huggingfacehub_api_token,
|
||||||
|
|
|
||||||
|
|
@ -82,25 +82,26 @@ class OpenAIModelComponent(LCModelComponent):
|
||||||
temperature = self.temperature
|
temperature = self.temperature
|
||||||
model_name: str = self.model_name
|
model_name: str = self.model_name
|
||||||
max_tokens = self.max_tokens
|
max_tokens = self.max_tokens
|
||||||
model_kwargs = self.model_kwargs
|
model_kwargs = self.model_kwargs or {}
|
||||||
openai_api_base = self.openai_api_base or "https://api.openai.com/v1"
|
openai_api_base = self.openai_api_base or "https://api.openai.com/v1"
|
||||||
json_mode = bool(output_schema_dict)
|
json_mode = bool(output_schema_dict)
|
||||||
seed = self.seed
|
seed = self.seed
|
||||||
|
model_kwargs["seed"] = seed
|
||||||
|
|
||||||
if openai_api_key:
|
if openai_api_key:
|
||||||
api_key = SecretStr(openai_api_key)
|
api_key = SecretStr(openai_api_key)
|
||||||
else:
|
else:
|
||||||
api_key = None
|
api_key = None
|
||||||
output = ChatOpenAI(
|
output = ChatOpenAI(
|
||||||
max_tokens=max_tokens or None,
|
max_tokens=max_tokens or None,
|
||||||
model_kwargs=model_kwargs or {},
|
model_kwargs=model_kwargs,
|
||||||
model=model_name,
|
model=model_name,
|
||||||
base_url=openai_api_base,
|
base_url=openai_api_base,
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
temperature=temperature or 0.1,
|
temperature=temperature or 0.1,
|
||||||
seed=seed,
|
|
||||||
)
|
)
|
||||||
if json_mode:
|
if json_mode:
|
||||||
output = output.with_structured_output(schema=output_schema_dict, method="json_mode")
|
output = output.with_structured_output(schema=output_schema_dict, method="json_mode") # type: ignore
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from langchain_google_vertexai import ChatVertexAI
|
from langchain_google_vertexai import ChatVertexAI
|
||||||
|
|
||||||
|
from langflow.base.constants import STREAM_INFO_TEXT
|
||||||
from langflow.base.models.model import LCModelComponent
|
from langflow.base.models.model import LCModelComponent
|
||||||
from langflow.field_typing import LanguageModel
|
from langflow.field_typing import LanguageModel
|
||||||
from langflow.io import BoolInput, FileInput, FloatInput, IntInput, MessageInput, MultilineInput, Output, StrInput
|
from langflow.io import BoolInput, FileInput, FloatInput, IntInput, MessageInput, MultilineInput, Output, StrInput
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class RecursiveCharacterTextSplitterComponent(Component):
|
||||||
Split text into chunks of a specified length.
|
Split text into chunks of a specified length.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
separators (list[str]): The characters to split on.
|
separators (list[str] | None): The characters to split on.
|
||||||
chunk_size (int): The maximum length of each chunk.
|
chunk_size (int): The maximum length of each chunk.
|
||||||
chunk_overlap (int): The amount of overlap between chunks.
|
chunk_overlap (int): The amount of overlap between chunks.
|
||||||
|
|
||||||
|
|
@ -63,9 +63,9 @@ class RecursiveCharacterTextSplitterComponent(Component):
|
||||||
self.separators = [unescape_string(x) for x in self.separators]
|
self.separators = [unescape_string(x) for x in self.separators]
|
||||||
|
|
||||||
# Make sure chunk_size and chunk_overlap are ints
|
# Make sure chunk_size and chunk_overlap are ints
|
||||||
if isinstance(self.chunk_size, str):
|
if self.chunk_size:
|
||||||
self.chunk_size = int(self.chunk_size)
|
self.chunk_size = int(self.chunk_size)
|
||||||
if isinstance(self.chunk_overlap, str):
|
if self.chunk_overlap:
|
||||||
self.chunk_overlap = int(self.chunk_overlap)
|
self.chunk_overlap = int(self.chunk_overlap)
|
||||||
splitter = RecursiveCharacterTextSplitter(
|
splitter = RecursiveCharacterTextSplitter(
|
||||||
separators=self.separators,
|
separators=self.separators,
|
||||||
|
|
|
||||||
|
|
@ -181,10 +181,6 @@ class AstraVectorStoreComponent(LCVectorStoreComponent):
|
||||||
if self.add_to_vector_store:
|
if self.add_to_vector_store:
|
||||||
self._add_documents_to_vector_store(vector_store)
|
self._add_documents_to_vector_store(vector_store)
|
||||||
|
|
||||||
return vector_store
|
|
||||||
|
|
||||||
def build_base_retriever(self):
|
|
||||||
vector_store = self.build_vector_store()
|
|
||||||
self.status = self._astradb_collection_to_data(vector_store.collection)
|
self.status = self._astradb_collection_to_data(vector_store.collection)
|
||||||
return vector_store
|
return vector_store
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ from langflow.custom import Component
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
|
|
||||||
|
|
||||||
class CassandraVectorStoreComponent(Component):
|
class CassandraVectorStoreComponent(Component):
|
||||||
|
|
@ -99,9 +98,6 @@ class CassandraVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> Cassandra:
|
def build_vector_store(self) -> Cassandra:
|
||||||
return self._build_cassandra()
|
return self._build_cassandra()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_cassandra()
|
|
||||||
|
|
||||||
def _build_cassandra(self) -> Cassandra:
|
def _build_cassandra(self) -> Cassandra:
|
||||||
try:
|
try:
|
||||||
import cassio
|
import cassio
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from typing import TYPE_CHECKING, List
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from chromadb.config import Settings
|
from chromadb.config import Settings
|
||||||
from langchain_chroma.vectorstores import Chroma
|
from langchain_chroma.vectorstores import Chroma
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ from langflow.custom import Component
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
|
|
||||||
|
|
||||||
class CouchbaseVectorStoreComponent(Component):
|
class CouchbaseVectorStoreComponent(Component):
|
||||||
|
|
@ -66,9 +65,6 @@ class CouchbaseVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> CouchbaseVectorStore:
|
def build_vector_store(self) -> CouchbaseVectorStore:
|
||||||
return self._build_couchbase()
|
return self._build_couchbase()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_couchbase()
|
|
||||||
|
|
||||||
def _build_couchbase(self) -> CouchbaseVectorStore:
|
def _build_couchbase(self) -> CouchbaseVectorStore:
|
||||||
try:
|
try:
|
||||||
from couchbase.auth import PasswordAuthenticator # type: ignore
|
from couchbase.auth import PasswordAuthenticator # type: ignore
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
|
|
||||||
|
|
||||||
class MongoVectorStoreComponent(Component):
|
class MongoVectorStoreComponent(Component):
|
||||||
display_name = "MongoDB Atlas"
|
display_name = "MongoDB Atlas"
|
||||||
|
|
@ -63,9 +61,6 @@ class MongoVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> MongoDBAtlasVectorSearch:
|
def build_vector_store(self) -> MongoDBAtlasVectorSearch:
|
||||||
return self._build_mongodb_atlas()
|
return self._build_mongodb_atlas()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_mongodb_atlas()
|
|
||||||
|
|
||||||
def _build_mongodb_atlas(self) -> MongoDBAtlasVectorSearch:
|
def _build_mongodb_atlas(self) -> MongoDBAtlasVectorSearch:
|
||||||
try:
|
try:
|
||||||
from pymongo import MongoClient
|
from pymongo import MongoClient
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,6 @@ class PineconeVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> Pinecone:
|
def build_vector_store(self) -> Pinecone:
|
||||||
return self._build_pinecone()
|
return self._build_pinecone()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_pinecone()
|
|
||||||
|
|
||||||
def _build_pinecone(self) -> Pinecone:
|
def _build_pinecone(self) -> Pinecone:
|
||||||
from langchain_pinecone._utilities import DistanceStrategy
|
from langchain_pinecone._utilities import DistanceStrategy
|
||||||
from langchain_pinecone.vectorstores import Pinecone
|
from langchain_pinecone.vectorstores import Pinecone
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ from langchain_community.vectorstores import Qdrant
|
||||||
from langchain_core.retrievers import BaseRetriever
|
from langchain_core.retrievers import BaseRetriever
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
@ -71,9 +70,6 @@ class QdrantVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> Qdrant:
|
def build_vector_store(self) -> Qdrant:
|
||||||
return self._build_qdrant()
|
return self._build_qdrant()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_qdrant()
|
|
||||||
|
|
||||||
def _build_qdrant(self) -> Qdrant:
|
def _build_qdrant(self) -> Qdrant:
|
||||||
qdrant_kwargs = {
|
qdrant_kwargs = {
|
||||||
"collection_name": self.collection_name,
|
"collection_name": self.collection_name,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ from langchain_core.retrievers import BaseRetriever
|
||||||
from supabase.client import Client, create_client
|
from supabase.client import Client, create_client
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import HandleInput, IntInput, Output, StrInput
|
from langflow.io import HandleInput, IntInput, Output, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
@ -58,9 +57,6 @@ class SupabaseVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> SupabaseVectorStore:
|
def build_vector_store(self) -> SupabaseVectorStore:
|
||||||
return self._build_supabase()
|
return self._build_supabase()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_supabase()
|
|
||||||
|
|
||||||
def _build_supabase(self) -> SupabaseVectorStore:
|
def _build_supabase(self) -> SupabaseVectorStore:
|
||||||
supabase: Client = create_client(self.supabase_url, supabase_key=self.supabase_service_key)
|
supabase: Client = create_client(self.supabase_url, supabase_key=self.supabase_service_key)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ from langchain_community.vectorstores import UpstashVectorStore
|
||||||
from langchain_core.retrievers import BaseRetriever
|
from langchain_core.retrievers import BaseRetriever
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
@ -74,9 +73,6 @@ class UpstashVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> UpstashVectorStore:
|
def build_vector_store(self) -> UpstashVectorStore:
|
||||||
return self._build_upstash()
|
return self._build_upstash()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_upstash()
|
|
||||||
|
|
||||||
def _build_upstash(self) -> UpstashVectorStore:
|
def _build_upstash(self) -> UpstashVectorStore:
|
||||||
use_upstash_embedding = self.embedding is None
|
use_upstash_embedding = self.embedding is None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ from langchain_community.vectorstores import Weaviate
|
||||||
from langchain_core.retrievers import BaseRetriever
|
from langchain_core.retrievers import BaseRetriever
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
from langflow.helpers.data import docs_to_data
|
from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
from langflow.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
@ -59,9 +58,6 @@ class WeaviateVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> Weaviate:
|
def build_vector_store(self) -> Weaviate:
|
||||||
return self._build_weaviate()
|
return self._build_weaviate()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_weaviate()
|
|
||||||
|
|
||||||
def _build_weaviate(self) -> Weaviate:
|
def _build_weaviate(self) -> Weaviate:
|
||||||
if self.api_key:
|
if self.api_key:
|
||||||
auth_config = weaviate.AuthApiKey(api_key=self.api_key)
|
auth_config = weaviate.AuthApiKey(api_key=self.api_key)
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ from langflow.helpers.data import docs_to_data
|
||||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
||||||
from langflow.schema import Data
|
from langflow.schema import Data
|
||||||
|
|
||||||
from langflow.field_typing import Retriever
|
|
||||||
|
|
||||||
|
|
||||||
class PGVectorStoreComponent(Component):
|
class PGVectorStoreComponent(Component):
|
||||||
display_name = "PGVector"
|
display_name = "PGVector"
|
||||||
|
|
@ -56,9 +54,6 @@ class PGVectorStoreComponent(Component):
|
||||||
def build_vector_store(self) -> PGVector:
|
def build_vector_store(self) -> PGVector:
|
||||||
return self._build_pgvector()
|
return self._build_pgvector()
|
||||||
|
|
||||||
def build_base_retriever(self) -> Retriever:
|
|
||||||
return self._build_pgvector()
|
|
||||||
|
|
||||||
def _build_pgvector(self) -> PGVector:
|
def _build_pgvector(self) -> PGVector:
|
||||||
if self.add_to_vector_store:
|
if self.add_to_vector_store:
|
||||||
documents = []
|
documents = []
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ from itertools import chain
|
||||||
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union
|
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from langflow.exceptions.component import ComponentBuildException
|
|
||||||
from langflow.exceptions.component import ComponentBuildException
|
from langflow.exceptions.component import ComponentBuildException
|
||||||
from langflow.graph.edge.base import ContractEdge
|
from langflow.graph.edge.base import ContractEdge
|
||||||
from langflow.graph.graph.constants import lazy_load_vertex_dict
|
from langflow.graph.graph.constants import lazy_load_vertex_dict
|
||||||
|
|
|
||||||
|
|
@ -198,8 +198,8 @@ class Vertex:
|
||||||
self.description: str = self.data["node"].get("description", "")
|
self.description: str = self.data["node"].get("description", "")
|
||||||
self.frozen: bool = self.data["node"].get("frozen", False)
|
self.frozen: bool = self.data["node"].get("frozen", False)
|
||||||
|
|
||||||
self.is_input: bool = self.data["node"].get("is_input") or self.is_input
|
self.is_input = self.data["node"].get("is_input") or self.is_input
|
||||||
self.is_output: bool = self.data["node"].get("is_output") or self.is_output
|
self.is_output = self.data["node"].get("is_output") or self.is_output
|
||||||
template_dicts = {key: value for key, value in self.data["node"]["template"].items() if isinstance(value, dict)}
|
template_dicts = {key: value for key, value in self.data["node"]["template"].items() if isinstance(value, dict)}
|
||||||
|
|
||||||
self.has_session_id = "session_id" in template_dicts
|
self.has_session_id = "session_id" in template_dicts
|
||||||
|
|
|
||||||
|
|
@ -106,8 +106,9 @@ class Data(BaseModel):
|
||||||
Returns:
|
Returns:
|
||||||
Document: The converted Document.
|
Document: The converted Document.
|
||||||
"""
|
"""
|
||||||
text = self.data.pop(self.text_key, self.default_value)
|
data_copy = self.data.copy()
|
||||||
return Document(page_content=text, metadata=self.data)
|
text = data_copy.pop(self.text_key, self.default_value)
|
||||||
|
return Document(page_content=text, metadata=data_copy)
|
||||||
|
|
||||||
def to_lc_message(
|
def to_lc_message(
|
||||||
self,
|
self,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Annotated, Any, AsyncIterator, Iterator, Optional
|
from typing import Annotated, Any, AsyncIterator, Iterator, Optional, List
|
||||||
|
|
||||||
from fastapi.encoders import jsonable_encoder
|
from fastapi.encoders import jsonable_encoder
|
||||||
from langchain_core.load import load
|
from langchain_core.load import load
|
||||||
|
|
@ -42,7 +42,7 @@ class Message(Data):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def model_post_init(self, __context: Any) -> None:
|
def model_post_init(self, __context: Any) -> None:
|
||||||
new_files = []
|
new_files: List[Any] = []
|
||||||
for file in self.files or []:
|
for file in self.files or []:
|
||||||
if is_image_file(file):
|
if is_image_file(file):
|
||||||
new_files.append(Image(path=file))
|
new_files.append(Image(path=file))
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Callable, Union
|
from typing import Callable, Union, cast
|
||||||
|
|
||||||
from pydantic import BaseModel, Field, model_serializer
|
from pydantic import BaseModel, Field, model_serializer
|
||||||
|
|
||||||
|
|
@ -9,7 +9,7 @@ from langflow.utils.constants import DIRECT_TYPES
|
||||||
|
|
||||||
class Template(BaseModel):
|
class Template(BaseModel):
|
||||||
type_name: str = Field(serialization_alias="_type")
|
type_name: str = Field(serialization_alias="_type")
|
||||||
fields: list[Input | InputTypes]
|
fields: list[Union[Input, InputTypes]]
|
||||||
|
|
||||||
def process_fields(
|
def process_fields(
|
||||||
self,
|
self,
|
||||||
|
|
@ -49,7 +49,7 @@ class Template(BaseModel):
|
||||||
field = next((field for field in self.fields if field.name == field_name), None)
|
field = next((field for field in self.fields if field.name == field_name), None)
|
||||||
if field is None:
|
if field is None:
|
||||||
raise ValueError(f"Field {field_name} not found in template {self.type_name}")
|
raise ValueError(f"Field {field_name} not found in template {self.type_name}")
|
||||||
return field
|
return cast(Input, field)
|
||||||
|
|
||||||
def update_field(self, field_name: str, field: Input) -> None:
|
def update_field(self, field_name: str, field: Input) -> None:
|
||||||
"""Updates the field with the given name."""
|
"""Updates the field with the given name."""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue