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
|
|
@ -111,7 +111,7 @@ async def retrieve_vertices_order(
|
|||
run_id = uuid.uuid4()
|
||||
graph.set_run_id(run_id)
|
||||
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)
|
||||
|
||||
except Exception as exc:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import warnings
|
|||
from typing import Optional, Union
|
||||
|
||||
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.field_typing import LanguageModel
|
||||
|
|
@ -120,7 +120,7 @@ class LCModelComponent(Component):
|
|||
def get_chat_result(
|
||||
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:
|
||||
raise ValueError("The message you want to send to the model is empty.")
|
||||
if system_message:
|
||||
|
|
@ -136,7 +136,7 @@ class LCModelComponent(Component):
|
|||
messages.append(input_value.to_lc_message())
|
||||
else:
|
||||
messages.append(HumanMessage(content=input_value))
|
||||
inputs = messages or {}
|
||||
inputs: Union[list, dict] = messages or {}
|
||||
try:
|
||||
if stream:
|
||||
return runnable.stream(inputs)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
from typing import Optional
|
||||
|
||||
from langchain_community.embeddings import BedrockEmbeddings
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
from langflow.field_typing import Embeddings
|
||||
from langflow.io import DropdownInput, Output, SecretStrInput, TextInput
|
||||
from langflow.io import DropdownInput, Output, TextInput
|
||||
|
||||
|
||||
class AmazonBedrockEmbeddingsComponent(LCModelComponent):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
from typing import Optional
|
||||
from langchain_openai import AzureOpenAIEmbeddings
|
||||
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.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):
|
||||
|
|
@ -34,7 +34,7 @@ class CohereEmbeddingsComponent(LCModelComponent):
|
|||
]
|
||||
|
||||
def build_embeddings(self) -> Embeddings:
|
||||
return CohereEmbeddings(
|
||||
return CohereEmbeddings( # type: ignore
|
||||
cohere_api_key=self.cohere_api_key,
|
||||
model=self.model,
|
||||
truncate=self.truncate,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
from typing import Dict, Optional
|
||||
|
||||
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
|
||||
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
from typing import Dict, Optional
|
||||
|
||||
from langchain_community.embeddings.huggingface import HuggingFaceInferenceAPIEmbeddings
|
||||
from pydantic.v1.types import SecretStr
|
||||
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
from typing import Optional
|
||||
|
||||
from langchain_community.embeddings import OllamaEmbeddings
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
from langflow.field_typing import Embeddings
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
from typing import List, Optional
|
||||
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
from langflow.field_typing import Embeddings
|
||||
from langflow.io import BoolInput, DictInput, FileInput, FloatInput, IntInput, Output, TextInput
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class EmbedComponent(CustomComponent):
|
|||
def build_config(self):
|
||||
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))
|
||||
self.status = 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.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
|
||||
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ class AmazonBedrockComponent(LCModelComponent):
|
|||
cache = self.cache
|
||||
stream = self.stream
|
||||
try:
|
||||
output = ChatBedrock(
|
||||
output = ChatBedrock( # type: ignore
|
||||
credentials_profile_name=credentials_profile_name,
|
||||
model_id=model_id,
|
||||
region_name=region_name,
|
||||
|
|
|
|||
|
|
@ -98,9 +98,9 @@ class AnthropicModelComponent(LCModelComponent):
|
|||
try:
|
||||
from anthropic import BadRequestError
|
||||
except ImportError:
|
||||
return
|
||||
return None
|
||||
if isinstance(exception, BadRequestError):
|
||||
message = exception.body.get("error", {}).get("message") # type: ignore
|
||||
if 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.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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from pydantic.v1 import SecretStr
|
|||
|
||||
from langflow.base.constants import STREAM_INFO_TEXT
|
||||
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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
|
|||
model_kwargs = self.model_kwargs or {}
|
||||
|
||||
try:
|
||||
llm = HuggingFaceEndpoint(
|
||||
llm = HuggingFaceEndpoint( # type: ignore
|
||||
endpoint_url=endpoint_url,
|
||||
task=task,
|
||||
huggingfacehub_api_token=huggingfacehub_api_token,
|
||||
|
|
|
|||
|
|
@ -82,25 +82,26 @@ class OpenAIModelComponent(LCModelComponent):
|
|||
temperature = self.temperature
|
||||
model_name: str = self.model_name
|
||||
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"
|
||||
json_mode = bool(output_schema_dict)
|
||||
seed = self.seed
|
||||
model_kwargs["seed"] = seed
|
||||
|
||||
if openai_api_key:
|
||||
api_key = SecretStr(openai_api_key)
|
||||
else:
|
||||
api_key = None
|
||||
output = ChatOpenAI(
|
||||
max_tokens=max_tokens or None,
|
||||
model_kwargs=model_kwargs or {},
|
||||
model_kwargs=model_kwargs,
|
||||
model=model_name,
|
||||
base_url=openai_api_base,
|
||||
api_key=api_key,
|
||||
temperature=temperature or 0.1,
|
||||
seed=seed,
|
||||
)
|
||||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
from langchain_google_vertexai import ChatVertexAI
|
||||
|
||||
from langflow.base.constants import STREAM_INFO_TEXT
|
||||
from langflow.base.models.model import LCModelComponent
|
||||
from langflow.field_typing import LanguageModel
|
||||
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.
|
||||
|
||||
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_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]
|
||||
|
||||
# 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)
|
||||
if isinstance(self.chunk_overlap, str):
|
||||
if self.chunk_overlap:
|
||||
self.chunk_overlap = int(self.chunk_overlap)
|
||||
splitter = RecursiveCharacterTextSplitter(
|
||||
separators=self.separators,
|
||||
|
|
|
|||
|
|
@ -181,10 +181,6 @@ class AstraVectorStoreComponent(LCVectorStoreComponent):
|
|||
if self.add_to_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)
|
||||
return vector_store
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ from langflow.custom import Component
|
|||
from langflow.helpers.data import docs_to_data
|
||||
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||
from langflow.schema import Data
|
||||
from langflow.field_typing import Retriever
|
||||
|
||||
|
||||
class CassandraVectorStoreComponent(Component):
|
||||
|
|
@ -99,9 +98,6 @@ class CassandraVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> Cassandra:
|
||||
return self._build_cassandra()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_cassandra()
|
||||
|
||||
def _build_cassandra(self) -> Cassandra:
|
||||
try:
|
||||
import cassio
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from copy import deepcopy
|
||||
from typing import TYPE_CHECKING, List
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from chromadb.config import Settings
|
||||
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.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||
from langflow.schema import Data
|
||||
from langflow.field_typing import Retriever
|
||||
|
||||
|
||||
class CouchbaseVectorStoreComponent(Component):
|
||||
|
|
@ -66,9 +65,6 @@ class CouchbaseVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> CouchbaseVectorStore:
|
||||
return self._build_couchbase()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_couchbase()
|
||||
|
||||
def _build_couchbase(self) -> CouchbaseVectorStore:
|
||||
try:
|
||||
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.schema import Data
|
||||
|
||||
from langflow.field_typing import Retriever
|
||||
|
||||
|
||||
class MongoVectorStoreComponent(Component):
|
||||
display_name = "MongoDB Atlas"
|
||||
|
|
@ -63,9 +61,6 @@ class MongoVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> MongoDBAtlasVectorSearch:
|
||||
return self._build_mongodb_atlas()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_mongodb_atlas()
|
||||
|
||||
def _build_mongodb_atlas(self) -> MongoDBAtlasVectorSearch:
|
||||
try:
|
||||
from pymongo import MongoClient
|
||||
|
|
|
|||
|
|
@ -70,9 +70,6 @@ class PineconeVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> Pinecone:
|
||||
return self._build_pinecone()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_pinecone()
|
||||
|
||||
def _build_pinecone(self) -> Pinecone:
|
||||
from langchain_pinecone._utilities import DistanceStrategy
|
||||
from langchain_pinecone.vectorstores import Pinecone
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ from langchain_community.vectorstores import Qdrant
|
|||
from langchain_core.retrievers import BaseRetriever
|
||||
|
||||
from langflow.custom import Component
|
||||
from langflow.field_typing import Retriever
|
||||
from langflow.helpers.data import docs_to_data
|
||||
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||
from langflow.schema import Data
|
||||
|
|
@ -71,9 +70,6 @@ class QdrantVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> Qdrant:
|
||||
return self._build_qdrant()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_qdrant()
|
||||
|
||||
def _build_qdrant(self) -> Qdrant:
|
||||
qdrant_kwargs = {
|
||||
"collection_name": self.collection_name,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ from langchain_core.retrievers import BaseRetriever
|
|||
from supabase.client import Client, create_client
|
||||
|
||||
from langflow.custom import Component
|
||||
from langflow.field_typing import Retriever
|
||||
from langflow.helpers.data import docs_to_data
|
||||
from langflow.io import HandleInput, IntInput, Output, StrInput
|
||||
from langflow.schema import Data
|
||||
|
|
@ -58,9 +57,6 @@ class SupabaseVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> SupabaseVectorStore:
|
||||
return self._build_supabase()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_supabase()
|
||||
|
||||
def _build_supabase(self) -> SupabaseVectorStore:
|
||||
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 langflow.custom import Component
|
||||
from langflow.field_typing import Retriever
|
||||
from langflow.helpers.data import docs_to_data
|
||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, StrInput
|
||||
from langflow.schema import Data
|
||||
|
|
@ -74,9 +73,6 @@ class UpstashVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> UpstashVectorStore:
|
||||
return self._build_upstash()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_upstash()
|
||||
|
||||
def _build_upstash(self) -> UpstashVectorStore:
|
||||
use_upstash_embedding = self.embedding is None
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ from langchain_community.vectorstores import Weaviate
|
|||
from langchain_core.retrievers import BaseRetriever
|
||||
|
||||
from langflow.custom import Component
|
||||
from langflow.field_typing import Retriever
|
||||
from langflow.helpers.data import docs_to_data
|
||||
from langflow.io import BoolInput, HandleInput, IntInput, Output, SecretStrInput, StrInput
|
||||
from langflow.schema import Data
|
||||
|
|
@ -59,9 +58,6 @@ class WeaviateVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> Weaviate:
|
||||
return self._build_weaviate()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_weaviate()
|
||||
|
||||
def _build_weaviate(self) -> Weaviate:
|
||||
if 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.schema import Data
|
||||
|
||||
from langflow.field_typing import Retriever
|
||||
|
||||
|
||||
class PGVectorStoreComponent(Component):
|
||||
display_name = "PGVector"
|
||||
|
|
@ -56,9 +54,6 @@ class PGVectorStoreComponent(Component):
|
|||
def build_vector_store(self) -> PGVector:
|
||||
return self._build_pgvector()
|
||||
|
||||
def build_base_retriever(self) -> Retriever:
|
||||
return self._build_pgvector()
|
||||
|
||||
def _build_pgvector(self) -> PGVector:
|
||||
if self.add_to_vector_store:
|
||||
documents = []
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ from itertools import chain
|
|||
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union
|
||||
from loguru import logger
|
||||
|
||||
from langflow.exceptions.component import ComponentBuildException
|
||||
from langflow.exceptions.component import ComponentBuildException
|
||||
from langflow.graph.edge.base import ContractEdge
|
||||
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.frozen: bool = self.data["node"].get("frozen", False)
|
||||
|
||||
self.is_input: bool = 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_input = self.data["node"].get("is_input") or self.is_input
|
||||
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)}
|
||||
|
||||
self.has_session_id = "session_id" in template_dicts
|
||||
|
|
|
|||
|
|
@ -106,8 +106,9 @@ class Data(BaseModel):
|
|||
Returns:
|
||||
Document: The converted Document.
|
||||
"""
|
||||
text = self.data.pop(self.text_key, self.default_value)
|
||||
return Document(page_content=text, metadata=self.data)
|
||||
data_copy = self.data.copy()
|
||||
text = data_copy.pop(self.text_key, self.default_value)
|
||||
return Document(page_content=text, metadata=data_copy)
|
||||
|
||||
def to_lc_message(
|
||||
self,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
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 langchain_core.load import load
|
||||
|
|
@ -42,7 +42,7 @@ class Message(Data):
|
|||
return value
|
||||
|
||||
def model_post_init(self, __context: Any) -> None:
|
||||
new_files = []
|
||||
new_files: List[Any] = []
|
||||
for file in self.files or []:
|
||||
if is_image_file(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
|
||||
|
||||
|
|
@ -9,7 +9,7 @@ from langflow.utils.constants import DIRECT_TYPES
|
|||
|
||||
class Template(BaseModel):
|
||||
type_name: str = Field(serialization_alias="_type")
|
||||
fields: list[Input | InputTypes]
|
||||
fields: list[Union[Input, InputTypes]]
|
||||
|
||||
def process_fields(
|
||||
self,
|
||||
|
|
@ -49,7 +49,7 @@ class Template(BaseModel):
|
|||
field = next((field for field in self.fields if field.name == field_name), None)
|
||||
if field is None:
|
||||
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:
|
||||
"""Updates the field with the given name."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue