{"id":"594143d5-b0c4-45aa-a3e4-b8e347889ca5","data":{"nodes":[{"id":"ChatInput-zuCwO","type":"genericNode","position":{"x":2643.296527135401,"y":474.76969466729395},"data":{"type":"ChatInput","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional, Union\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Interaction Panel.\"\n icon = \"ChatInput\"\n\n def build_config(self):\n build_config = super().build_config()\n build_config[\"input_value\"] = {\n \"input_types\": [],\n \"display_name\": \"Message\",\n \"multiline\": True,\n }\n\n return build_config\n\n def build(\n self,\n sender: Optional[str] = \"User\",\n sender_name: Optional[str] = \"User\",\n input_value: Optional[str] = None,\n session_id: Optional[str] = None,\n return_record: Optional[bool] = False,\n ) -> Union[Text, Record]:\n return super().build_no_record(\n sender=sender,\n sender_name=sender_name,\n input_value=input_value,\n session_id=session_id,\n return_record=return_record,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"input_value":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"fileTypes":[],"file_path":"","password":false,"name":"input_value","display_name":"Message","advanced":false,"input_types":[],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"value":"Utilizando informações sobre a cultura e valores da Magalu, crie uma publicação de vaga atraente para a posição de Especialista em Inteligência Artificial. A postagem deve incluir uma introdução envolvente, descrição detalhada da função, responsabilidades, requisitos e benefícios únicos oferecidos pela empresa. Certifique-se de que o tom ressoe com a cultura da Magalu e atraia candidatos que se alinhem com os valores e a missão da empresa."},"return_record":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"file_path":"","password":false,"name":"return_record","display_name":"Return Record","advanced":true,"dynamic":false,"info":"Return the message as a record containing the sender, sender_name, and session_id.","load_from_db":false,"title_case":false},"sender":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"User","fileTypes":[],"file_path":"","password":false,"options":["Machine","User"],"name":"sender","display_name":"Sender Type","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"sender_name":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"Guilherme","fileTypes":[],"file_path":"","password":false,"name":"sender_name","display_name":"Sender Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"session_id":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"session_id","display_name":"Session ID","advanced":true,"dynamic":false,"info":"If provided, the message will be stored in the memory.","load_from_db":false,"title_case":false,"input_types":["Text"]},"_type":"CustomComponent"},"description":"Get chat inputs from the Interaction Panel.","icon":"ChatInput","base_classes":["object","Record","str","Text"],"display_name":"Chat Input","documentation":"","custom_fields":{"sender":null,"sender_name":null,"input_value":null,"session_id":null,"return_record":null},"output_types":["Text","Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatInput-zuCwO"},"selected":false,"width":384,"height":374},{"id":"ChatOutput-y6rMa","type":"genericNode","position":{"x":2578.185285102584,"y":1838.1696974184129},"data":{"type":"ChatOutput","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional, Union\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Interaction Panel.\"\n icon = \"ChatOutput\"\n\n def build(\n self,\n sender: Optional[str] = \"Machine\",\n sender_name: Optional[str] = \"AI\",\n input_value: Optional[str] = None,\n session_id: Optional[str] = None,\n return_record: Optional[bool] = False,\n record_template: Optional[str] = \"{text}\",\n ) -> Union[Text, Record]:\n return super().build_with_record(\n sender=sender,\n sender_name=sender_name,\n input_value=input_value,\n session_id=session_id,\n return_record=return_record,\n record_template=record_template or \"\",\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"input_value":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"fileTypes":[],"file_path":"","password":false,"name":"input_value","display_name":"Message","advanced":false,"input_types":["Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false},"record_template":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"{text}","fileTypes":[],"file_path":"","password":false,"name":"record_template","display_name":"Record Template","advanced":true,"dynamic":false,"info":"In case of Message being a Record, this template will be used to convert it to text.","load_from_db":false,"title_case":false,"input_types":["Text"]},"return_record":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"file_path":"","password":false,"name":"return_record","display_name":"Return Record","advanced":true,"dynamic":false,"info":"Return the message as a record containing the sender, sender_name, and session_id.","load_from_db":false,"title_case":false},"sender":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"Machine","fileTypes":[],"file_path":"","password":false,"options":["Machine","User"],"name":"sender","display_name":"Sender Type","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"sender_name":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"AI","fileTypes":[],"file_path":"","password":false,"name":"sender_name","display_name":"Sender Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"session_id":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"session_id","display_name":"Session ID","advanced":true,"dynamic":false,"info":"If provided, the message will be stored in the memory.","load_from_db":false,"title_case":false,"input_types":["Text"]},"_type":"CustomComponent"},"description":"Display a chat message in the Interaction Panel.","icon":"ChatOutput","base_classes":["object","Record","str","Text"],"display_name":"Chat Output","documentation":"","custom_fields":{"sender":null,"sender_name":null,"input_value":null,"session_id":null,"return_record":null,"record_template":null},"output_types":["Text","Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatOutput-y6rMa"},"selected":false,"width":384,"height":380},{"id":"CustomComponent-xWTVP","type":"genericNode","position":{"x":281.83124306534273,"y":383.08301122845285},"data":{"type":"CustomComponent","node":{"template":{"llm":{"type":"object","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"llm","display_name":"Language Model","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"tools":{"type":"Tool","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"tools","display_name":"Tools","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"backstory":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"backstory","display_name":"Backstory","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Especialista em analisar culturas empresariais e identificar valores e necessidades chave a partir de várias fontes, incluindo sites e descrições breves."},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import BaseLanguageModel, Tool\r\nfrom crewai import Agent\r\nfrom typing import List, Optional\r\n\r\nclass AgentCrewComponent(CustomComponent):\r\n display_name: str = \"AgentCrew\"\r\n description: str = \"This component initializes an agent with language model and tools.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"role\": {\"display_name\": \"Role\"},\r\n \"goal\": {\"display_name\": \"Goal\"},\r\n \"backstory\": {\"display_name\": \"Backstory\"},\r\n \"tools\": {\"display_name\": \"Tools\", \"type\": \"list\", \"item_type\": \"object\", \"optional\": True}, # Torna a entrada opcional\r\n \"llm\": {\"display_name\": \"Language Model\", \"field_type\": \"object\"},\r\n }\r\n\r\n def build(self, role: str, goal: str, backstory: str, llm: BaseLanguageModel, tools: Optional[List[Tool]] = None) -> Agent:\r\n # Se \"tools\" não for especificado, define como uma lista vazia\r\n if tools is None:\r\n tools = []\r\n \r\n # Supondo que cada ferramenta na lista seja um objeto já inicializado e pronto para uso\r\n return Agent(\r\n role=role,\r\n goal=goal,\r\n backstory=backstory,\r\n tools=tools, # Passa a lista de ferramentas diretamente\r\n llm=llm,\r\n verbose=True\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"goal":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"goal","display_name":"Goal","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Analisar sites de empresas e descrições fornecidas para extrair insights sobre cultura, valores e necessidades específicas."},"role":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"role","display_name":"Role","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Analista de Pesquisa"},"_type":"CustomComponent"},"description":"This component initializes an agent with language model and tools.","base_classes":["Agent"],"display_name":"AgentCrew","documentation":"","custom_fields":{"role":null,"goal":null,"backstory":null,"llm":null,"tools":null},"output_types":["Agent"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-xWTVP"},"selected":false,"width":384,"height":591,"dragging":false},{"id":"CustomComponent-CaVFL","type":"genericNode","position":{"x":722.352867436292,"y":367.4836158559584},"data":{"type":"CustomComponent","node":{"template":{"agent":{"type":"Agent","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"agent","display_name":"Agent","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import Data\r\nfrom crewai import Task, Agent\r\n\r\nclass TaskComponent(CustomComponent):\r\n display_name: str = \"Create Task\"\r\n description: str = \"This component creates a task for an agent.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"description\": {\"display_name\": \"Description\"},\r\n \"expected_output\": {\"display_name\": \"Expected Output\"},\r\n \"agent\": {\"display_name\": \"Agent\"},\r\n }\r\n\r\n def build(self, description: str, expected_output: str, agent: Agent) -> Task:\r\n return Task(\r\n description=description,\r\n expected_output=expected_output,\r\n agent=agent\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"description":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"description","display_name":"Description","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Redigir uma postagem de emprego para a função descrita pelo gerente de contratação. Use os insights sobre a empresa para iniciar com uma introdução envolvente, seguida por uma descrição detalhada da função, responsabilidades e habilidades e qualificações necessárias. Certifique-se de que o tom esteja alinhado com a cultura da empresa e incorpore quaisquer benefícios ou oportunidades únicas oferecidas pela empresa. Descrição da vaga: {topic}"},"expected_output":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"expected_output","display_name":"Expected Output","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Um relatório abrangente detalhando a cultura, valores e missão da empresa, junto com pontos de venda específicos relevantes para a função. Sugestões sobre como incorporar esses insights na postagem de emprego devem ser incluídas."},"_type":"CustomComponent"},"description":"This component creates a task for an agent.","base_classes":["Task"],"display_name":"TaskCrew","documentation":"","custom_fields":{"description":null,"expected_output":null,"agent":null},"output_types":["Task"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-CaVFL"},"selected":false,"width":384,"height":430,"dragging":false},{"id":"CustomComponent-aJaym","type":"genericNode","position":{"x":1707.9261113230095,"y":1119.7594566709454},"data":{"type":"CustomComponent","node":{"template":{"agents":{"type":"Agent","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"agents","display_name":"Agents","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"tasks":{"type":"Task","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"tasks","display_name":"Tasks","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom crewai import Crew, Task, Agent\r\nfrom typing import List, Optional\r\nfrom langflow.field_typing import Text\r\n\r\nclass CrewComponent(CustomComponent):\r\n display_name: str = \"Initialize Crew\"\r\n description: str = \"This component initializes a crew to execute tasks with multiple agents.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"agents\": {\"display_name\": \"Agents\", \"type\": \"list\", \"item_type\": \"Agent\"}, # Define a entrada como lista de Agent\r\n \"tasks\": {\"display_name\": \"Tasks\", \"type\": \"list\", \"item_type\": \"Task\"}, # Define a entrada como lista de Task\r\n \"topic\": {\"display_name\": \"Topic\", \"type\": \"str\", \"required\": False, \"value\": \"\"}, # New topic field\r\n \"verbose\": {\"display_name\": \"Verbose Level\", \"value\": 2},\r\n \"max_iterations\": {\"display_name\": \"Max Iterations\", \"value\": 10},\r\n }\r\n\r\n def build(self, agents: List[Agent], tasks: List[Task], topic: Optional[str], verbose: int, max_iterations: int) -> Text:\r\n \"\"\"Constrói o objeto Crew e executa as tarefas com os agentes coletados.\"\"\"\r\n if not agents or not tasks:\r\n raise ValueError(\"No agents or tasks have been added.\")\r\n \r\n inputs = {\r\n 'topic':topic\r\n }\r\n # Use the topic to guide the tasks or modify task execution context here if necessary\r\n response = Crew(\r\n agents=agents,\r\n tasks=tasks,\r\n verbose=verbose,\r\n max_iterations=max_iterations\r\n )\r\n return response.kickoff(inputs=inputs) # Assuming kickoff returns Text type or adjust accordingly\r\n\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"max_iterations":{"type":"int","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":10,"fileTypes":[],"file_path":"","password":false,"name":"max_iterations","display_name":"Max Iterations","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"topic":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"","fileTypes":[],"file_path":"","password":false,"name":"topic","display_name":"Topic","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"verbose":{"type":"int","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":2,"fileTypes":[],"file_path":"","password":false,"name":"verbose","display_name":"Verbose Level","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"_type":"CustomComponent"},"description":"This component initializes a crew to execute tasks with multiple agents.","base_classes":["object","str","Text"],"display_name":"CrewAi","documentation":"","custom_fields":{"agents":null,"tasks":null,"topic":null,"verbose":null,"max_iterations":null},"output_types":["Text"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-aJaym"},"selected":false,"width":384,"height":575,"dragging":false},{"id":"ChatOpenAISpecs-aOtLY","type":"genericNode","position":{"x":-207.48690049533502,"y":392.3309648412761},"data":{"type":"ChatOpenAISpecs","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional\n\nfrom langchain_community.chat_models.openai import ChatOpenAI\n\nfrom langflow.base.models.openai_constants import MODEL_NAMES\nfrom langflow.field_typing import BaseLanguageModel, NestedDict\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass ChatOpenAIComponent(CustomComponent):\n display_name = \"ChatOpenAI\"\n description = \"`OpenAI` Chat large language models API.\"\n icon = \"OpenAI\"\n\n def build_config(self):\n return {\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": False,\n \"required\": False,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n \"required\": False,\n },\n \"model_name\": {\"display_name\": \"Model Name\", \"advanced\": False, \"options\": MODEL_NAMES},\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": False,\n \"required\": False,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"advanced\": False,\n \"required\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"required\": False,\n \"value\": 0.7,\n },\n }\n\n def build(\n self,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n model_name: str = \"gpt-4o\",\n openai_api_base: Optional[str] = None,\n openai_api_key: Optional[str] = None,\n temperature: float = 0.7,\n ) -> BaseLanguageModel:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n return ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"max_tokens":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"4096","fileTypes":[],"file_path":"","password":false,"name":"max_tokens","display_name":"Max Tokens","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_kwargs":{"type":"NestedDict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":{},"fileTypes":[],"file_path":"","password":false,"name":"model_kwargs","display_name":"Model Kwargs","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_name":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"gpt-3.5-turbo","fileTypes":[],"file_path":"","password":false,"options":["gpt-4o","gpt-4-turbo","gpt-4-turbo-preview","gpt-3.5-turbo","gpt-3.5-turbo-0125"],"name":"model_name","display_name":"Model Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":false,"dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_key":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":""},"temperature":{"type":"float","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"0","fileTypes":[],"file_path":"","password":false,"name":"temperature","display_name":"Temperature","advanced":false,"dynamic":false,"info":"","rangeSpec":{"step_type":"float","min":-1,"max":1,"step":0.1},"load_from_db":false,"title_case":false},"_type":"CustomComponent"},"description":"`OpenAI` Chat large language models API.","icon":"OpenAI","base_classes":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"display_name":"ChatOpenAI","documentation":"","custom_fields":{"max_tokens":null,"model_kwargs":null,"model_name":null,"openai_api_base":null,"openai_api_key":null,"temperature":null},"output_types":["BaseLanguageModel"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatOpenAISpecs-aOtLY"},"selected":false,"width":384,"height":646,"positionAbsolute":{"x":-207.48690049533502,"y":392.3309648412761},"dragging":false},{"id":"CustomComponent-XkT1V","type":"genericNode","position":{"x":300.8742686453229,"y":1212.178341504613},"data":{"type":"CustomComponent","node":{"template":{"llm":{"type":"object","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"llm","display_name":"Language Model","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"tools":{"type":"Tool","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"tools","display_name":"Tools","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"backstory":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"backstory","display_name":"Backstory","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Hábil em criar descrições de vagas atraentes que ressoam com os valores da empresa e atraem os candidatos certos."},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import BaseLanguageModel, Tool\r\nfrom crewai import Agent\r\nfrom typing import List, Optional\r\n\r\nclass AgentCrewComponent(CustomComponent):\r\n display_name: str = \"AgentCrew\"\r\n description: str = \"This component initializes an agent with language model and tools.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"role\": {\"display_name\": \"Role\"},\r\n \"goal\": {\"display_name\": \"Goal\"},\r\n \"backstory\": {\"display_name\": \"Backstory\"},\r\n \"tools\": {\"display_name\": \"Tools\", \"type\": \"list\", \"item_type\": \"object\", \"optional\": True}, # Torna a entrada opcional\r\n \"llm\": {\"display_name\": \"Language Model\", \"field_type\": \"object\"},\r\n }\r\n\r\n def build(self, role: str, goal: str, backstory: str, llm: BaseLanguageModel, tools: Optional[List[Tool]] = None) -> Agent:\r\n # Se \"tools\" não for especificado, define como uma lista vazia\r\n if tools is None:\r\n tools = []\r\n \r\n # Supondo que cada ferramenta na lista seja um objeto já inicializado e pronto para uso\r\n return Agent(\r\n role=role,\r\n goal=goal,\r\n backstory=backstory,\r\n tools=tools, # Passa a lista de ferramentas diretamente\r\n llm=llm,\r\n verbose=True\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"goal":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"goal","display_name":"Goal","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Usar os insights do Analista de Pesquisa para criar uma postagem de emprego detalhada, envolvente e atraente."},"role":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"role","display_name":"Role","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Escritor de Descrição de Vaga"},"_type":"CustomComponent"},"description":"This component initializes an agent with language model and tools.","base_classes":["Agent"],"display_name":"AgentCrew","documentation":"","custom_fields":{"role":null,"goal":null,"backstory":null,"llm":null,"tools":null},"output_types":["Agent"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-XkT1V"},"selected":false,"width":384,"height":591},{"id":"CustomComponent-HA23q","type":"genericNode","position":{"x":773.2259409129906,"y":1208.7046786642018},"data":{"type":"CustomComponent","node":{"template":{"agent":{"type":"Agent","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"agent","display_name":"Agent","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import Data\r\nfrom crewai import Task, Agent\r\n\r\nclass TaskComponent(CustomComponent):\r\n display_name: str = \"Create Task\"\r\n description: str = \"This component creates a task for an agent.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"description\": {\"display_name\": \"Description\"},\r\n \"expected_output\": {\"display_name\": \"Expected Output\"},\r\n \"agent\": {\"display_name\": \"Agent\"},\r\n }\r\n\r\n def build(self, description: str, expected_output: str, agent: Agent) -> Task:\r\n return Task(\r\n description=description,\r\n expected_output=expected_output,\r\n agent=agent\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"description":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"description","display_name":"Description","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Redigir uma postagem de emprego para a função descrita pelo gerente de contratação. Use os insights sobre a empresa para iniciar com uma introdução envolvente, seguida por uma descrição detalhada da função, responsabilidades e habilidades e qualificações necessárias. Certifique-se de que o tom esteja alinhado com a cultura da empresa e incorpore quaisquer benefícios ou oportunidades únicas oferecidas pela empresa. garantindo que está de acordo com a Descrição da vaga: {topic}"},"expected_output":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"expected_output","display_name":"Expected Output","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Uma postagem de emprego detalhada e envolvente que inclui uma introdução, descrição da função, responsabilidades, requisitos e benefícios únicos da empresa. O tom deve ressoar com a cultura e valores da empresa, visando atrair os candidatos certos."},"_type":"CustomComponent"},"description":"This component creates a task for an agent.","base_classes":["Task"],"display_name":"TaskCrew","documentation":"","custom_fields":{"description":null,"expected_output":null,"agent":null},"output_types":["Task"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-HA23q"},"selected":false,"width":384,"height":430},{"id":"ChatOpenAISpecs-X6cMN","type":"genericNode","position":{"x":-195.82624909216975,"y":1225.2425628734072},"data":{"type":"ChatOpenAISpecs","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional\n\nfrom langchain_community.chat_models.openai import ChatOpenAI\n\nfrom langflow.base.models.openai_constants import MODEL_NAMES\nfrom langflow.field_typing import BaseLanguageModel, NestedDict\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass ChatOpenAIComponent(CustomComponent):\n display_name = \"ChatOpenAI\"\n description = \"`OpenAI` Chat large language models API.\"\n icon = \"OpenAI\"\n\n def build_config(self):\n return {\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": False,\n \"required\": False,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n \"required\": False,\n },\n \"model_name\": {\"display_name\": \"Model Name\", \"advanced\": False, \"options\": MODEL_NAMES},\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": False,\n \"required\": False,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"advanced\": False,\n \"required\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"required\": False,\n \"value\": 0.7,\n },\n }\n\n def build(\n self,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n model_name: str = \"gpt-4o\",\n openai_api_base: Optional[str] = None,\n openai_api_key: Optional[str] = None,\n temperature: float = 0.7,\n ) -> BaseLanguageModel:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n return ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"max_tokens":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"4096","fileTypes":[],"file_path":"","password":false,"name":"max_tokens","display_name":"Max Tokens","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_kwargs":{"type":"NestedDict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":{},"fileTypes":[],"file_path":"","password":false,"name":"model_kwargs","display_name":"Model Kwargs","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_name":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"gpt-3.5-turbo","fileTypes":[],"file_path":"","password":false,"options":["gpt-4o","gpt-4-turbo","gpt-4-turbo-preview","gpt-3.5-turbo","gpt-3.5-turbo-0125"],"name":"model_name","display_name":"Model Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":false,"dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_key":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":""},"temperature":{"type":"float","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"0","fileTypes":[],"file_path":"","password":false,"name":"temperature","display_name":"Temperature","advanced":false,"dynamic":false,"info":"","rangeSpec":{"step_type":"float","min":-1,"max":1,"step":0.1},"load_from_db":false,"title_case":false},"_type":"CustomComponent"},"description":"`OpenAI` Chat large language models API.","icon":"OpenAI","base_classes":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"display_name":"ChatOpenAI","documentation":"","custom_fields":{"max_tokens":null,"model_kwargs":null,"model_name":null,"openai_api_base":null,"openai_api_key":null,"temperature":null},"output_types":["BaseLanguageModel"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatOpenAISpecs-X6cMN"},"selected":false,"width":384,"height":646,"dragging":false},{"id":"CustomComponent-lRUEE","type":"genericNode","position":{"x":301.0906759529503,"y":1987.7123336877166},"data":{"type":"CustomComponent","node":{"template":{"llm":{"type":"object","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"llm","display_name":"Language Model","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"tools":{"type":"Tool","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"tools","display_name":"Tools","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"backstory":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"backstory","display_name":"Backstory","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Um editor meticuloso com um olhar para detalhes, garantindo que todo conteúdo seja claro, envolvente e gramaticalmente perfeito, além de garantir que está correto a vaga solicitada."},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import BaseLanguageModel, Tool\r\nfrom crewai import Agent\r\nfrom typing import List, Optional\r\n\r\nclass AgentCrewComponent(CustomComponent):\r\n display_name: str = \"AgentCrew\"\r\n description: str = \"This component initializes an agent with language model and tools.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"role\": {\"display_name\": \"Role\"},\r\n \"goal\": {\"display_name\": \"Goal\"},\r\n \"backstory\": {\"display_name\": \"Backstory\"},\r\n \"tools\": {\"display_name\": \"Tools\", \"type\": \"list\", \"item_type\": \"object\", \"optional\": True}, # Torna a entrada opcional\r\n \"llm\": {\"display_name\": \"Language Model\", \"field_type\": \"object\"},\r\n }\r\n\r\n def build(self, role: str, goal: str, backstory: str, llm: BaseLanguageModel, tools: Optional[List[Tool]] = None) -> Agent:\r\n # Se \"tools\" não for especificado, define como uma lista vazia\r\n if tools is None:\r\n tools = []\r\n \r\n # Supondo que cada ferramenta na lista seja um objeto já inicializado e pronto para uso\r\n return Agent(\r\n role=role,\r\n goal=goal,\r\n backstory=backstory,\r\n tools=tools, # Passa a lista de ferramentas diretamente\r\n llm=llm,\r\n verbose=True\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"goal":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"goal","display_name":"Goal","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Revisar a postagem de emprego para clareza, envolvimento, precisão gramatical e alinhamento com os valores da empresa, refinando-a para garantir a perfeição."},"role":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"role","display_name":"Role","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Especialista em Revisão e Edição"},"_type":"CustomComponent"},"description":"This component initializes an agent with language model and tools.","base_classes":["Agent"],"display_name":"AgentCrew","documentation":"","custom_fields":{"role":null,"goal":null,"backstory":null,"llm":null,"tools":null},"output_types":["Agent"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-lRUEE"},"selected":false,"width":384,"height":591},{"id":"CustomComponent-tZCo3","type":"genericNode","position":{"x":794.5544747929839,"y":1984.238670847305},"data":{"type":"CustomComponent","node":{"template":{"agent":{"type":"Agent","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"agent","display_name":"Agent","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\r\nfrom langflow.field_typing import Data\r\nfrom crewai import Task, Agent\r\n\r\nclass TaskComponent(CustomComponent):\r\n display_name: str = \"Create Task\"\r\n description: str = \"This component creates a task for an agent.\"\r\n\r\n def build_config(self):\r\n return {\r\n \"description\": {\"display_name\": \"Description\"},\r\n \"expected_output\": {\"display_name\": \"Expected Output\"},\r\n \"agent\": {\"display_name\": \"Agent\"},\r\n }\r\n\r\n def build(self, description: str, expected_output: str, agent: Agent) -> Task:\r\n return Task(\r\n description=description,\r\n expected_output=expected_output,\r\n agent=agent\r\n )\r\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"description":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"description","display_name":"Description","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Revisar a postagem de emprego para a função. Verifique a clareza, envolvimento, precisão gramatical e alinhamento com a cultura e valores da empresa. Edite e refine o conteúdo, garantindo que ele fale diretamente aos candidatos desejados e reflita com precisão os benefícios e oportunidades únicas da função. Forneça feedback para quaisquer revisões necessárias. garantindo que está de acordo com a Descrição da vaga: {topic}"},"expected_output":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"expected_output","display_name":"Expected Output","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"Uma postagem de emprego polida e sem erros que seja clara, envolvente e perfeitamente alinhada com a cultura e valores da empresa. Feedback sobre melhorias potenciais e aprovação final para publicação. Formato em markdown."},"_type":"CustomComponent"},"description":"This component creates a task for an agent.","base_classes":["Task"],"display_name":"TaskCrew","documentation":"","custom_fields":{"description":null,"expected_output":null,"agent":null},"output_types":["Task"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"official":false},"id":"CustomComponent-tZCo3"},"selected":false,"width":384,"height":430},{"id":"ChatOpenAISpecs-lAsCi","type":"genericNode","position":{"x":-222,"y":1995.4985234134188},"data":{"type":"ChatOpenAISpecs","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional\n\nfrom langchain_community.chat_models.openai import ChatOpenAI\n\nfrom langflow.base.models.openai_constants import MODEL_NAMES\nfrom langflow.field_typing import BaseLanguageModel, NestedDict\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass ChatOpenAIComponent(CustomComponent):\n display_name = \"ChatOpenAI\"\n description = \"`OpenAI` Chat large language models API.\"\n icon = \"OpenAI\"\n\n def build_config(self):\n return {\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": False,\n \"required\": False,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n \"required\": False,\n },\n \"model_name\": {\"display_name\": \"Model Name\", \"advanced\": False, \"options\": MODEL_NAMES},\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": False,\n \"required\": False,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"advanced\": False,\n \"required\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"required\": False,\n \"value\": 0.7,\n },\n }\n\n def build(\n self,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n model_name: str = \"gpt-4o\",\n openai_api_base: Optional[str] = None,\n openai_api_key: Optional[str] = None,\n temperature: float = 0.7,\n ) -> BaseLanguageModel:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n return ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"max_tokens":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"4096","fileTypes":[],"file_path":"","password":false,"name":"max_tokens","display_name":"Max Tokens","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_kwargs":{"type":"NestedDict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":{},"fileTypes":[],"file_path":"","password":false,"name":"model_kwargs","display_name":"Model Kwargs","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_name":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"gpt-4o","fileTypes":[],"file_path":"","password":false,"options":["gpt-4o","gpt-4-turbo","gpt-4-turbo-preview","gpt-3.5-turbo","gpt-3.5-turbo-0125"],"name":"model_name","display_name":"Model Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":false,"dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_key":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":""},"temperature":{"type":"float","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"0","fileTypes":[],"file_path":"","password":false,"name":"temperature","display_name":"Temperature","advanced":false,"dynamic":false,"info":"","rangeSpec":{"step_type":"float","min":-1,"max":1,"step":0.1},"load_from_db":false,"title_case":false},"_type":"CustomComponent"},"description":"`OpenAI` Chat large language models API.","icon":"OpenAI","base_classes":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"display_name":"ChatOpenAI","documentation":"","custom_fields":{"max_tokens":null,"model_kwargs":null,"model_name":null,"openai_api_base":null,"openai_api_key":null,"temperature":null},"output_types":["BaseLanguageModel"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatOpenAISpecs-lAsCi"},"selected":false,"width":384,"height":646},{"id":"SearchAPITool-fHcqZ","type":"genericNode","position":{"x":-195.53609403883877,"y":-35.087501525878906},"data":{"type":"SearchAPITool","node":{"template":{"api_key":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"api_key","display_name":"API Key","advanced":false,"dynamic":false,"info":"The API key to use SearchApi.","load_from_db":false,"title_case":false,"input_types":["Text"],"value":""},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langchain_community.tools.searchapi import SearchAPIRun\nfrom langchain_community.utilities.searchapi import SearchApiAPIWrapper\n\nfrom langflow.custom import CustomComponent\nfrom langflow.field_typing import Tool\n\n\nclass SearchApiToolComponent(CustomComponent):\n display_name: str = \"SearchApi Tool\"\n description: str = \"Real-time search engine results API.\"\n documentation: str = \"https://www.searchapi.io/docs/google\"\n field_config = {\n \"engine\": {\n \"display_name\": \"Engine\",\n \"field_type\": \"str\",\n \"info\": \"The search engine to use.\",\n },\n \"api_key\": {\n \"display_name\": \"API Key\",\n \"field_type\": \"str\",\n \"required\": True,\n \"password\": True,\n \"info\": \"The API key to use SearchApi.\",\n },\n }\n\n def build(\n self,\n engine: str,\n api_key: str,\n ) -> Tool:\n search_api_wrapper = SearchApiAPIWrapper(engine=engine, searchapi_api_key=api_key)\n\n tool = SearchAPIRun(api_wrapper=search_api_wrapper)\n\n self.status = tool\n return tool # type: ignore\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"engine":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"engine","display_name":"Engine","advanced":false,"dynamic":false,"info":"The search engine to use.","load_from_db":false,"title_case":false,"input_types":["Text"],"value":"google"},"_type":"CustomComponent"},"description":"Real-time search engine results API.","base_classes":["BaseTool","Generic","object","Runnable","RunnableSerializable","Serializable","Tool"],"display_name":"SearchApi Tool","documentation":"https://www.searchapi.io/docs/google","custom_fields":{"engine":null,"api_key":null},"output_types":["Tool"],"field_formatters":{},"frozen":false,"field_order":["engine","api_key"],"beta":false},"id":"SearchAPITool-fHcqZ"},"selected":false,"width":384,"height":382,"dragging":false}],"edges":[{"source":"CustomComponent-xWTVP","target":"CustomComponent-CaVFL","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-xWTVPœ}","targetHandle":"{œfieldNameœ:œagentœ,œidœ:œCustomComponent-CaVFLœ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-xWTVP{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-xWTVPœ}-CustomComponent-CaVFL{œfieldNameœ:œagentœ,œidœ:œCustomComponent-CaVFLœ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agent","id":"CustomComponent-CaVFL","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-xWTVP"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-aJaym","target":"ChatOutput-y6rMa","sourceHandle":"{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-aJaymœ}","targetHandle":"{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-y6rMaœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","id":"reactflow__edge-CustomComponent-aJaym{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-aJaymœ}-ChatOutput-y6rMa{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-y6rMaœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"input_value","id":"ChatOutput-y6rMa","inputTypes":["Text"],"type":"str"},"sourceHandle":{"baseClasses":["object","str","Text"],"dataType":"CustomComponent","id":"CustomComponent-aJaym"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-CaVFL","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-CaVFLœ}","targetHandle":"{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","id":"reactflow__edge-CustomComponent-CaVFL{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-CaVFLœ}-CustomComponent-aJaym{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","data":{"targetHandle":{"fieldName":"tasks","id":"CustomComponent-aJaym","inputTypes":null,"type":"Task"},"sourceHandle":{"baseClasses":["Task"],"dataType":"CustomComponent","id":"CustomComponent-CaVFL"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-xWTVP","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-xWTVPœ}","targetHandle":"{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-xWTVP{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-xWTVPœ}-CustomComponent-aJaym{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agents","id":"CustomComponent-aJaym","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-xWTVP"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"ChatInput-zuCwO","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œobjectœ,œRecordœ,œstrœ,œTextœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-zuCwOœ}","targetHandle":"{œfieldNameœ:œtopicœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","id":"reactflow__edge-ChatInput-zuCwO{œbaseClassesœ:[œobjectœ,œRecordœ,œstrœ,œTextœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-zuCwOœ}-CustomComponent-aJaym{œfieldNameœ:œtopicœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"topic","id":"CustomComponent-aJaym","inputTypes":["Text"],"type":"str"},"sourceHandle":{"baseClasses":["object","Record","str","Text"],"dataType":"ChatInput","id":"ChatInput-zuCwO"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"ChatOpenAISpecs-aOtLY","target":"CustomComponent-xWTVP","sourceHandle":"{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-aOtLYœ}","targetHandle":"{œfieldNameœ:œllmœ,œidœ:œCustomComponent-xWTVPœ,œinputTypesœ:null,œtypeœ:œobjectœ}","id":"reactflow__edge-ChatOpenAISpecs-aOtLY{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-aOtLYœ}-CustomComponent-xWTVP{œfieldNameœ:œllmœ,œidœ:œCustomComponent-xWTVPœ,œinputTypesœ:null,œtypeœ:œobjectœ}","data":{"targetHandle":{"fieldName":"llm","id":"CustomComponent-xWTVP","inputTypes":null,"type":"object"},"sourceHandle":{"baseClasses":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"dataType":"ChatOpenAISpecs","id":"ChatOpenAISpecs-aOtLY"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"ChatOpenAISpecs-X6cMN","target":"CustomComponent-XkT1V","sourceHandle":"{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-X6cMNœ}","targetHandle":"{œfieldNameœ:œllmœ,œidœ:œCustomComponent-XkT1Vœ,œinputTypesœ:null,œtypeœ:œobjectœ}","id":"reactflow__edge-ChatOpenAISpecs-X6cMN{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-X6cMNœ}-CustomComponent-XkT1V{œfieldNameœ:œllmœ,œidœ:œCustomComponent-XkT1Vœ,œinputTypesœ:null,œtypeœ:œobjectœ}","data":{"targetHandle":{"fieldName":"llm","id":"CustomComponent-XkT1V","inputTypes":null,"type":"object"},"sourceHandle":{"baseClasses":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"dataType":"ChatOpenAISpecs","id":"ChatOpenAISpecs-X6cMN"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-XkT1V","target":"CustomComponent-HA23q","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-XkT1Vœ}","targetHandle":"{œfieldNameœ:œagentœ,œidœ:œCustomComponent-HA23qœ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-XkT1V{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-XkT1Vœ}-CustomComponent-HA23q{œfieldNameœ:œagentœ,œidœ:œCustomComponent-HA23qœ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agent","id":"CustomComponent-HA23q","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-XkT1V"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-HA23q","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-HA23qœ}","targetHandle":"{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","id":"reactflow__edge-CustomComponent-HA23q{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-HA23qœ}-CustomComponent-aJaym{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","data":{"targetHandle":{"fieldName":"tasks","id":"CustomComponent-aJaym","inputTypes":null,"type":"Task"},"sourceHandle":{"baseClasses":["Task"],"dataType":"CustomComponent","id":"CustomComponent-HA23q"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-XkT1V","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-XkT1Vœ}","targetHandle":"{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-XkT1V{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-XkT1Vœ}-CustomComponent-aJaym{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agents","id":"CustomComponent-aJaym","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-XkT1V"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"ChatOpenAISpecs-lAsCi","target":"CustomComponent-lRUEE","sourceHandle":"{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-lAsCiœ}","targetHandle":"{œfieldNameœ:œllmœ,œidœ:œCustomComponent-lRUEEœ,œinputTypesœ:null,œtypeœ:œobjectœ}","id":"reactflow__edge-ChatOpenAISpecs-lAsCi{œbaseClassesœ:[œBaseLanguageModelœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ],œdataTypeœ:œChatOpenAISpecsœ,œidœ:œChatOpenAISpecs-lAsCiœ}-CustomComponent-lRUEE{œfieldNameœ:œllmœ,œidœ:œCustomComponent-lRUEEœ,œinputTypesœ:null,œtypeœ:œobjectœ}","data":{"targetHandle":{"fieldName":"llm","id":"CustomComponent-lRUEE","inputTypes":null,"type":"object"},"sourceHandle":{"baseClasses":["BaseLanguageModel","Generic","object","Runnable","RunnableSerializable","Serializable"],"dataType":"ChatOpenAISpecs","id":"ChatOpenAISpecs-lAsCi"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-lRUEE","target":"CustomComponent-tZCo3","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-lRUEEœ}","targetHandle":"{œfieldNameœ:œagentœ,œidœ:œCustomComponent-tZCo3œ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-lRUEE{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-lRUEEœ}-CustomComponent-tZCo3{œfieldNameœ:œagentœ,œidœ:œCustomComponent-tZCo3œ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agent","id":"CustomComponent-tZCo3","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-lRUEE"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-tZCo3","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-tZCo3œ}","targetHandle":"{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","id":"reactflow__edge-CustomComponent-tZCo3{œbaseClassesœ:[œTaskœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-tZCo3œ}-CustomComponent-aJaym{œfieldNameœ:œtasksœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œTaskœ}","data":{"targetHandle":{"fieldName":"tasks","id":"CustomComponent-aJaym","inputTypes":null,"type":"Task"},"sourceHandle":{"baseClasses":["Task"],"dataType":"CustomComponent","id":"CustomComponent-tZCo3"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"CustomComponent-lRUEE","target":"CustomComponent-aJaym","sourceHandle":"{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-lRUEEœ}","targetHandle":"{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","id":"reactflow__edge-CustomComponent-lRUEE{œbaseClassesœ:[œAgentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-lRUEEœ}-CustomComponent-aJaym{œfieldNameœ:œagentsœ,œidœ:œCustomComponent-aJaymœ,œinputTypesœ:null,œtypeœ:œAgentœ}","data":{"targetHandle":{"fieldName":"agents","id":"CustomComponent-aJaym","inputTypes":null,"type":"Agent"},"sourceHandle":{"baseClasses":["Agent"],"dataType":"CustomComponent","id":"CustomComponent-lRUEE"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"SearchAPITool-fHcqZ","target":"CustomComponent-xWTVP","sourceHandle":"{œbaseClassesœ:[œBaseToolœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ,œToolœ],œdataTypeœ:œSearchAPIToolœ,œidœ:œSearchAPITool-fHcqZœ}","targetHandle":"{œfieldNameœ:œtoolsœ,œidœ:œCustomComponent-xWTVPœ,œinputTypesœ:null,œtypeœ:œToolœ}","id":"reactflow__edge-SearchAPITool-fHcqZ{œbaseClassesœ:[œBaseToolœ,œGenericœ,œobjectœ,œRunnableœ,œRunnableSerializableœ,œSerializableœ,œToolœ],œdataTypeœ:œSearchAPIToolœ,œidœ:œSearchAPITool-fHcqZœ}-CustomComponent-xWTVP{œfieldNameœ:œtoolsœ,œidœ:œCustomComponent-xWTVPœ,œinputTypesœ:null,œtypeœ:œToolœ}","data":{"targetHandle":{"fieldName":"tools","id":"CustomComponent-xWTVP","inputTypes":null,"type":"Tool"},"sourceHandle":{"baseClasses":["BaseTool","Generic","object","Runnable","RunnableSerializable","Serializable","Tool"],"dataType":"SearchAPITool","id":"SearchAPITool-fHcqZ"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false}],"viewport":{"x":-618.4260432999456,"y":-707.7898310589248,"zoom":0.5743491774985191}},"description":"Building Intelligent Interactions.","name":"Crewai-apeti-job-post","last_tested_version":"1.0.0a33","is_component":false}