Merge branch 'two_edges' of https://github.com/langflow-ai/langflow into two_edges

This commit is contained in:
cristhianzl 2024-06-20 18:30:16 -03:00
commit cd49b2e55a
37 changed files with 54 additions and 173 deletions

18
poetry.lock generated
View file

@ -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"

View file

@ -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]

View file

@ -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:

View file

@ -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)

View file

@ -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):

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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 = []

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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))

View 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."""