diff --git a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py index 5dfb53387..5a411ecec 100644 --- a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py +++ b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py @@ -16,7 +16,8 @@ from langflow.field_typing.range_spec import RangeSpec class ConversationalAgent(CustomComponent): display_name: str = "OpenAI Conversational Agent" description: str = "Conversational Agent that can use OpenAI's function calling API" - + icon = "OpenAI" + def build_config(self): openai_function_models = [ "gpt-4-turbo-preview", diff --git a/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py index 6f3540358..4b25dffe7 100644 --- a/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py +++ b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py @@ -9,6 +9,7 @@ class HuggingFaceEmbeddingsComponent(CustomComponent): documentation = ( "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers" ) + icon="HuggingFace" def build_config(self): return { diff --git a/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py b/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py index acc828d7f..edb83ed72 100644 --- a/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py @@ -9,6 +9,8 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(CustomComponent): display_name = "HuggingFaceInferenceAPIEmbeddings" description = "HuggingFace sentence_transformers embedding models, API version." documentation = "https://github.com/huggingface/text-embeddings-inference" + icon="HuggingFace" + def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py b/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py index 0c1e3b159..3b79ff76c 100644 --- a/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py +++ b/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py @@ -10,6 +10,8 @@ from langflow import CustomComponent class AmazonBedrockComponent(CustomComponent): display_name: str = "Amazon Bedrock" description: str = "LLM model from Amazon Bedrock." + icon = "Amazon" + def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py b/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py index 94c4ed8f5..121c5b2c2 100644 --- a/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py +++ b/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py @@ -10,6 +10,7 @@ from langflow import CustomComponent class AnthropicLLM(CustomComponent): display_name: str = "AnthropicLLM" description: str = "Anthropic Chat&Completion large language models." + icon ="Anthropic" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/AnthropicSpecs.py b/src/backend/langflow/components/model_specs/AnthropicSpecs.py index c1b776617..7a0f3e4db 100644 --- a/src/backend/langflow/components/model_specs/AnthropicSpecs.py +++ b/src/backend/langflow/components/model_specs/AnthropicSpecs.py @@ -10,6 +10,8 @@ from langflow.field_typing import BaseLanguageModel, NestedDict class AnthropicComponent(CustomComponent): display_name = "Anthropic" description = "Anthropic large language models." + icon ="Anthropic" + def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py b/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py index c0e376d16..9534c7cf1 100644 --- a/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py +++ b/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py @@ -9,6 +9,7 @@ class ChatAnthropicComponent(CustomComponent): display_name = "ChatAnthropic" description = "`Anthropic` chat large language models." documentation = "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic" + icon ="Anthropic" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py b/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py index 2ad4f0309..0f20f0852 100644 --- a/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py +++ b/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py @@ -9,6 +9,7 @@ from langflow.field_typing import BaseLanguageModel, NestedDict class ChatOpenAIComponent(CustomComponent): display_name = "ChatOpenAI" description = "`OpenAI` Chat large language models API." + icon = "OpenAI" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py b/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py index 66235a1d8..8cc7b4256 100644 --- a/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py +++ b/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py @@ -10,6 +10,8 @@ from langflow.field_typing import BaseLanguageModel class ChatVertexAIComponent(CustomComponent): display_name = "ChatVertexAI" description = "`Vertex AI` Chat large language models API." + icon="VertexAI" + def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/CohereSpecs.py b/src/backend/langflow/components/model_specs/CohereSpecs.py index 3b74fc9b4..8cb0f3624 100644 --- a/src/backend/langflow/components/model_specs/CohereSpecs.py +++ b/src/backend/langflow/components/model_specs/CohereSpecs.py @@ -7,6 +7,7 @@ class CohereComponent(CustomComponent): display_name = "Cohere" description = "Cohere large language models." documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" + icon = "Cohere" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py b/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py index eb1134583..9ff17e389 100644 --- a/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py +++ b/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py @@ -10,6 +10,7 @@ class GoogleGenerativeAIComponent(CustomComponent): display_name: str = "Google Generative AI" description: str = "A component that uses Google Generative AI to generate text." documentation: str = "http://docs.langflow.org/components/custom" + icon = "Google" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py b/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py index 579e3c0b3..704de9029 100644 --- a/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py +++ b/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py @@ -8,6 +8,8 @@ from langflow import CustomComponent class HuggingFaceEndpointsComponent(CustomComponent): display_name: str = "Hugging Face Inference API" description: str = "LLM model from Hugging Face Inference API." + icon="HuggingFace" + def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/VertexAISpecs.py b/src/backend/langflow/components/model_specs/VertexAISpecs.py index 008451bc8..a6013e17d 100644 --- a/src/backend/langflow/components/model_specs/VertexAISpecs.py +++ b/src/backend/langflow/components/model_specs/VertexAISpecs.py @@ -7,6 +7,7 @@ from langchain_community.llms.vertexai import VertexAI class VertexAIComponent(CustomComponent): display_name = "VertexAI" description = "Google Vertex AI large language models" + icon="VertexAI" def build_config(self): return { diff --git a/src/backend/langflow/components/models/AmazonBedrockModel.py b/src/backend/langflow/components/models/AmazonBedrockModel.py index 4ae28e70c..fdddc07d1 100644 --- a/src/backend/langflow/components/models/AmazonBedrockModel.py +++ b/src/backend/langflow/components/models/AmazonBedrockModel.py @@ -9,7 +9,7 @@ from langflow.field_typing import Text class AmazonBedrockComponent(LCModelComponent): display_name: str = "Amazon Bedrock Model" description: str = "Generate text using LLM model from Amazon Bedrock." - icon = "AmazonBedrock" + icon = "Amazon" def build_config(self): return { diff --git a/src/backend/langflow/components/models/GoogleGenerativeAIModel.py b/src/backend/langflow/components/models/GoogleGenerativeAIModel.py index 423a66df6..50a3f0f7a 100644 --- a/src/backend/langflow/components/models/GoogleGenerativeAIModel.py +++ b/src/backend/langflow/components/models/GoogleGenerativeAIModel.py @@ -11,6 +11,7 @@ class GoogleGenerativeAIComponent(LCModelComponent): display_name: str = "Google Generative AIModel" description: str = "Generate text using Google Generative AI to generate text." icon = "GoogleGenerativeAI" + icon = "Google" def build_config(self): return { diff --git a/src/backend/langflow/components/models/VertexAiModel.py b/src/backend/langflow/components/models/VertexAiModel.py index d7eab71ed..5a1950f39 100644 --- a/src/backend/langflow/components/models/VertexAiModel.py +++ b/src/backend/langflow/components/models/VertexAiModel.py @@ -9,6 +9,8 @@ from langflow.field_typing import Text class ChatVertexAIComponent(LCModelComponent): display_name = "ChatVertexAIModel" description = "Generate text using Vertex AI Chat large language models API." + icon="VertexAI" + def build_config(self): return { diff --git a/src/backend/langflow/components/retrievers/AmazonKendra.py b/src/backend/langflow/components/retrievers/AmazonKendra.py index c0aedb1bc..886afeff5 100644 --- a/src/backend/langflow/components/retrievers/AmazonKendra.py +++ b/src/backend/langflow/components/retrievers/AmazonKendra.py @@ -9,6 +9,7 @@ from langflow import CustomComponent class AmazonKendraRetrieverComponent(CustomComponent): display_name: str = "Amazon Kendra Retriever" description: str = "Retriever that uses the Amazon Kendra API." + icon = "Amazon" def build_config(self): return { diff --git a/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py b/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py index 26afd765c..aa4f412a8 100644 --- a/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py +++ b/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py @@ -17,6 +17,8 @@ class VectaraSelfQueryRetriverComponent(CustomComponent): description: str = "Implementation of Vectara Self Query Retriever" documentation = "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query" beta = True + icon="Vectara" + field_config = { "code": {"show": True}, diff --git a/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py b/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py index de5533b0a..5d4537408 100644 --- a/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py +++ b/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py @@ -11,6 +11,7 @@ class MongoDBAtlasComponent(CustomComponent): description = ( "Construct a `MongoDB Atlas Vector Search` vector store from raw documents." ) + icon="MongoDB" def build_config(self): return { diff --git a/src/backend/langflow/components/vectorstores/Qdrant.py b/src/backend/langflow/components/vectorstores/Qdrant.py index 6d68cdd55..3541f09e2 100644 --- a/src/backend/langflow/components/vectorstores/Qdrant.py +++ b/src/backend/langflow/components/vectorstores/Qdrant.py @@ -10,6 +10,7 @@ from langflow.field_typing import Document, Embeddings, NestedDict class QdrantComponent(CustomComponent): display_name = "Qdrant" description = "Construct Qdrant wrapper from a list of texts." + icon="Qdrant" def build_config(self): return { diff --git a/src/backend/langflow/components/vectorstores/QdrantSearch.py b/src/backend/langflow/components/vectorstores/QdrantSearch.py index 46e2766fd..742690a5d 100644 --- a/src/backend/langflow/components/vectorstores/QdrantSearch.py +++ b/src/backend/langflow/components/vectorstores/QdrantSearch.py @@ -9,6 +9,8 @@ from langflow.schema import Record class QdrantSearchComponent(QdrantComponent, LCVectorStoreComponent): display_name = "Qdrant" description = "Construct Qdrant wrapper from a list of texts." + icon="Qdrant" + def build_config(self): return { diff --git a/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py b/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py index 493632fe9..3a57f7951 100644 --- a/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py +++ b/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py @@ -11,6 +11,7 @@ from langflow.schema import Record class SupabaseSearchComponent(LCVectorStoreComponent): display_name = "Supabase Search" description = "Search a Supabase Vector Store for similar documents." + icon="Supabase" def build_config(self): return { diff --git a/src/backend/langflow/components/vectorstores/Vectara.py b/src/backend/langflow/components/vectorstores/Vectara.py index b5360ffd2..5ac105543 100644 --- a/src/backend/langflow/components/vectorstores/Vectara.py +++ b/src/backend/langflow/components/vectorstores/Vectara.py @@ -18,6 +18,7 @@ class VectaraComponent(CustomComponent): "https://python.langchain.com/docs/integrations/vectorstores/vectara" ) beta = True + icon="Vectara" field_config = { "vectara_customer_id": { "display_name": "Vectara Customer ID", diff --git a/src/backend/langflow/components/vectorstores/VectaraSearch.py b/src/backend/langflow/components/vectorstores/VectaraSearch.py index c90148d1e..da2c083d1 100644 --- a/src/backend/langflow/components/vectorstores/VectaraSearch.py +++ b/src/backend/langflow/components/vectorstores/VectaraSearch.py @@ -14,6 +14,8 @@ class VectaraSearchComponent(VectaraComponent, LCVectorStoreComponent): "https://python.langchain.com/docs/integrations/vectorstores/vectara" ) beta = True + icon="Vectara" + field_config = { "search_type": { "display_name": "Search Type", diff --git a/src/backend/langflow/components/vectorstores/WeaviateSearch.py b/src/backend/langflow/components/vectorstores/WeaviateSearch.py index 2d7001074..3eda5c583 100644 --- a/src/backend/langflow/components/vectorstores/WeaviateSearch.py +++ b/src/backend/langflow/components/vectorstores/WeaviateSearch.py @@ -14,6 +14,8 @@ class WeaviateSearchVectorStore(WeaviateVectorStoreComponent, LCVectorStoreCompo "https://python.langchain.com/docs/integrations/vectorstores/weaviate" ) beta = True + icon="Weaviate" + field_config = { "search_type": { "display_name": "Search Type", diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index ad76ff49a..7faf4bc79 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -21,6 +21,7 @@ import { useDarkStore } from "./stores/darkStore"; import useFlowsManagerStore from "./stores/flowsManagerStore"; import { useStoreStore } from "./stores/storeStore"; import { useTypesStore } from "./stores/typesStore"; +import useFlowStore from "./stores/flowStore"; export default function App() { const removeFromTempNotificationList = useAlertStore( @@ -44,6 +45,25 @@ export default function App() { const refreshStars = useDarkStore((state) => state.refreshStars); const checkHasStore = useStoreStore((state) => state.checkHasStore); + const handleModalWShortcut = useFlowStore(state => state.handleModalWShortcut); + const nodes = useFlowStore(state => state.nodes); + + useEffect(() => { + const onKeyDown = (event: KeyboardEvent) => { + const selectedNode = nodes.filter((obj) => obj.selected); + if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === "C" && selectedNode.length > 0) { + event.preventDefault(); + handleModalWShortcut("code"); + } + }; + + document.addEventListener("keydown", onKeyDown); + + return () => { + document.removeEventListener("keydown", onKeyDown); + }; + }, [handleModalWShortcut, nodes]); + useEffect(() => { refreshStars(); refreshVersion(); diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index a536ec6d6..f0552bdc7 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -269,6 +269,7 @@ export default function GenericNode({ showNode={showNode} openAdvancedModal={false} onCloseAdvancedModal={() => {}} + selected={selected} >