langflow-ai / langflow

Langflow is a low-code app builder for RAG and multi-agent AI applications. It’s Python-based and agnostic to any model, API, or database.
http://www.langflow.org
MIT License
33.77k stars 4.09k forks source link

Multimodais não funcionam mais #3209

Closed amiartint closed 2 months ago

amiartint commented 3 months ago

Bug Description

Pessoal, desde as novas versões 1.x os fluxos com as as multimodais (uso Gemini 1.5 flash, GPT 4o e GPT 4o mini) não funcionam mais, olhem o print. Meu fluxo de teste é super simples (print também), parou de funcionar quando tive que atualizar alguns componentes dele.

Por favor ajuda aê, tem alguns bons dias isto e não sou o único, vi outras pessoas com o mesmo problema no Dircord.

ScreenShot_20240805205526

ScreenShot_20240805201419

Reproduction

Envio imagem no Playground, o erro aparece. Quando também escrevo alguma coisa ou não escrevo nada. ScreenShot_20240805201419 ScreenShot_20240805205526

Expected behavior

Multimodais funcionando

Who can help?

No response

Operating System

Windows 10

Langflow Version

1.0.14

Python Version

3.12

Screenshot

ScreenShot_20240805201419 ScreenShot_20240805205526

Flow File

No response

dosubot[bot] commented 3 months ago

Hello @amiartint! I'm here to help you with any issues or questions you have. I can also assist in becoming a contributor. Let's get to the bottom of this together!

O erro "Error building Component Prompt: not enough values to unpack (expected 2, got 1)" na versão 1.0.14 do Langflow provavelmente está relacionado a um problema no método build_prompt da classe PromptComponent. Esse erro sugere que uma operação de desempacotamento de tupla está esperando dois valores, mas apenas um foi fornecido.

Para resolver esse problema, você pode verificar o seguinte:

  1. Instanciação Correta: Certifique-se de que o template e as variables estão corretamente instanciados e passados para o método build_prompt.
  2. Saída Esperada: Verifique se o método from_template_and_variables da classe Message está retornando a saída esperada.

Aqui está um exemplo de código que adiciona informações de depuração para ajudar a identificar onde o problema pode estar:

from langflow.base.prompts.api_utils import process_prompt_template
from langflow.custom import Component
from langflow.io import Output, PromptInput
from langflow.schema.message import Message
from langflow.template.utils import update_template_values

class PromptComponent(Component):
    display_name: str = "Prompt"
    description: str = "Create a prompt template with dynamic variables."
    icon = "prompts"
    trace_type = "prompt"

    inputs = [
        PromptInput(name="template", display_name="Template"),
    ]

    outputs = [
        Output(display_name="Prompt Message", name="prompt", method="build_prompt"),
    ]

    async def build_prompt(
        self,
    ) -> Message:
        try:
            prompt = await Message.from_template_and_variables(**self._attributes)
            self.status = prompt.text
            return prompt
        except Exception as e:
            print(f"Error in build_prompt method: {e}")
            raise

    def post_code_processing(self, new_build_config: dict, current_build_config: dict):
        frontend_node = super().post_code_processing(new_build_config, current_build_config)
        template = frontend_node["template"]["template"]["value"]
        _ = process_prompt_template(
            template=template,
            name="template",
            custom_fields=frontend_node["custom_fields"],
            frontend_node_template=frontend_node["template"],
        )
        update_template_values(frontend_template=frontend_node, raw_template=current_build_config["template"])
        return frontend_node

Esse código adiciona um bloco try-except para capturar e imprimir quaisquer exceções que ocorram durante a execução do método build_prompt. Isso ajudará a identificar a localização exata e a causa do erro [1][2].

Além disso, a versão 1.0.14 do Langflow introduziu várias mudanças que podem afetar a funcionalidade dos fluxos multimodais, como a necessidade de definir Inputs e Outputs, suporte a múltiplas saídas, e a capacidade de gerenciar múltiplas sessões de memória [3][4]. Certifique-se de que seu fluxo está atualizado para refletir essas mudanças.

To continue talking to Dosu, mention @dosu.

amiartint commented 3 months ago

Olá @Dosu

Já usei o GPT do Langflow para analisar esta mensagem de erro e encontrei estas respostas também. Os componentes do fluxo estão atualizados, o que gostaria de saber é se preciso mudar a estrutura do fluxo, trocando componentes por outros, por exemplo. Ou adicionando novos, o que seja.

Sou novato no Langflow e estou em busca de uma ferramenta para utilizar multimodais em chatbots e outros app, encontrando esta ferramenta será a que vou usar junto aos meus clientes. Vocês tem outras pessoas enfrentando o mesmo problema que eu, ontem mesmo encontrei outro usuario na mesma situação no Discord, começamos a conversar e trocar experiências sobre a questão. Me parece que se vocês nos disserem o que fazer em um fluxo simples como o meu, por exemplo, ou se for um problema no framework que ele seja acertado o mais rápido possível (tem mais de semana que venho relatando o problema no Discord), será bom para todos nós, vocês e seus usuários.

Sou brasileiro, orgulhoso do trabalho dos meus compatriotas, mas preciso prestar serviços e ganhar dinheiro. Quero muito, mas muito mesmo, virar o usuário número 1 do Langflow no Brasil, tenho clientes na Europa e na América do Sul esperando minha resposta sobre a ferramenta que vamos utilizar.

dosubot[bot] commented 3 months ago

Para evitar o erro "Error building Component Prompt: not enough values to unpack (expected 2, got 1)" na versão 1.0.14 do Langflow ao usar capacidades multimodais, você deve garantir que os componentes do seu fluxo estejam corretamente estruturados com os inputs e outputs apropriados. Aqui está uma estrutura simples que você pode seguir:

  1. Defina Inputs e Outputs: Certifique-se de que cada componente no seu fluxo tenha inputs e outputs claramente definidos. Isso ajuda a gerenciar o fluxo de dados e evitar erros relacionados ao desempacotamento de valores.

  2. Use Múltiplos Outputs Corretamente: Se um componente tiver múltiplos outputs, certifique-se de que cada output esteja corretamente conectado aos componentes subsequentes. Isso evita o problema de ter menos valores do que o esperado.

  3. Verifique a Configuração dos Componentes: Verifique se cada componente está configurado corretamente, especialmente ao lidar com dados multimodais (por exemplo, texto, imagens). Certifique-se de que os tipos de dados e os valores esperados correspondam aos requisitos do componente.

  4. Valide e Corrija Prompts: Use as funções validate_prompt e fix_prompt para garantir que seus prompts estejam corretamente formatados. Isso pode ajudar a evitar problemas relacionados às variáveis de input.

Aqui está um exemplo de estrutura de fluxo simples:

# Defina o componente de input
input_component = InputComponent(data_type="text")

# Defina um componente de processamento com múltiplos outputs
processing_component = ProcessingComponent()
processing_component.add_output("text_output")
processing_component.add_output("image_output")

# Defina os componentes de output
text_output_component = OutputComponent(data_type="text")
image_output_component = OutputComponent(data_type="image")

# Conecte os componentes
input_component.connect_to(processing_component)
processing_component.connect_output("text_output", text_output_component)
processing_component.connect_output("image_output", image_output_component)

# Valide e corrija prompts se necessário
prompt = "Seu prompt aqui"
validated_prompt = validate_prompt(prompt)

# Execute o fluxo
flow = Flow()
flow.add_component(input_component)
flow.add_component(processing_component)
flow.add_component(text_output_component)
flow.add_component(image_output_component)
flow.execute()

Além disso, certifique-se de que seu PromptComponent esteja corretamente implementado. Aqui está um exemplo baseado no código-fonte do Langflow:

from langflow.base.prompts.api_utils import process_prompt_template
from langflow.custom import Component
from langflow.io import Output, PromptInput
from langflow.schema.message import Message
from langflow.template.utils import update_template_values

class PromptComponent(Component):
    display_name: str = "Prompt"
    description: str = "Create a prompt template with dynamic variables."
    icon = "prompts"
    trace_type = "prompt"

    inputs = [
        PromptInput(name="template", display_name="Template"),
    ]

    outputs = [
        Output(display_name="Prompt Message", name="prompt", method="build_prompt"),
    ]

    async def build_prompt(self) -> Message:
        prompt = await Message.from_template_and_variables(**self._attributes)
        self.status = prompt.text
        return prompt

    def post_code_processing(self, new_build_config: dict, current_build_config: dict):
        frontend_node = super().post_code_processing(new_build_config, current_build_config)
        template = frontend_node["template"]["template"]["value"]
        _ = process_prompt_template(
            template=template,
            name="template",
            custom_fields=frontend_node["custom_fields"],
            frontend_node_template=frontend_node["template"],
        )
        update_template_values(frontend_template=frontend_node, raw_template=current_build_config["template"])
        return frontend_node

Essa estrutura garante que cada componente tenha os inputs e outputs necessários definidos, e as conexões entre os componentes estejam corretamente estabelecidas. Além disso, validar e corrigir prompts pode ajudar a evitar o erro de desempacotamento que você encontrou [1].

Se precisar de mais ajuda ou tiver outras dúvidas, estou à disposição!

To continue talking to Dosu, mention @dosu.

amiartint commented 3 months ago

Não entendi nada. É para fazer o que? Não sou programador, se eu tiver que ter este conhecimento, vou desistir do Langflow.

dosubot[bot] commented 3 months ago

It looks like this issue needs your expertise, @ogabrielluiz, could you please take a look?

To continue talking to Dosu, mention @dosu.

amiartint commented 3 months ago

@ogabrielluiz, tudo bem? Estamos eu e muitos usuários do Langflow com um grande problema. Olha acima, por favor.

carlosrcoelho commented 2 months ago

@amiartint

Estou tentando replicar seu problema, mas sem sucesso. Consegue me informar se esse problema persiste na atual versão 1.0.15?

Se estiver persistindo pra você, consegue compartilhar o flow?

amiartint commented 2 months ago

Persiste, ontem pelo menos persistia, dia 13/08. Fluxo absolutamente simplório, básico. image image

amiartint commented 2 months ago

Persiste hoje também, acabei de rodá-lo (print).

amiartint commented 2 months ago

Onde o erro aparece no fluxo. image

carlosrcoelho commented 2 months ago

@amiartint

Consegue me enviar o seu flow?

amiartint commented 2 months ago

Memory Chatbot Vision .json

amiartint commented 2 months ago

@carlosrcoelho , acima o flow

amiartint commented 2 months ago

Oi Carlos, enviei lá

Carlos Coelho @.***> escreveu (quarta, 14/08/2024 à(s) 16:17):

@amiartint https://github.com/amiartint

Consegue me enviar o seu flow?

— Reply to this email directly, view it on GitHub https://github.com/langflow-ai/langflow/issues/3209#issuecomment-2289661012, or unsubscribe https://github.com/notifications/unsubscribe-auth/BELUBZMC5E3KOVSOP33KH23ZROUNPAVCNFSM6AAAAABMBG7Y3WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBZGY3DCMBRGI . You are receiving this because you were mentioned.Message ID: @.***>

carlosrcoelho commented 2 months ago

@amiartint

Testei seu flow e deu certo. Estou usando a versao 1.0.15.

Segue o video:

https://github.com/user-attachments/assets/e5193122-f182-4a8a-b1e0-2719062d1eb6

amiartint commented 2 months ago

Também, versão 1.0.15, no VSCODE, Python 3.12.2. Tem alguma ideia do que pode estar errado? Tentei inclusive trocar o prompt por um novo, como no print, mesmo erro.

[image: image.png]

[image: image.png]

[image: image.png]

[image: image.png]

Carlos Coelho @.***> escreveu (sexta, 16/08/2024 à(s) 09:32):

@amiartint https://github.com/amiartint

Testei seu flow e deu certo. Estou usando a versao 1.0.15.

Segue o video:

https://github.com/user-attachments/assets/e5193122-f182-4a8a-b1e0-2719062d1eb6

— Reply to this email directly, view it on GitHub https://github.com/langflow-ai/langflow/issues/3209#issuecomment-2293428105, or unsubscribe https://github.com/notifications/unsubscribe-auth/BELUBZMIDDJKRGNCKNCUFLLZRXWPJAVCNFSM6AAAAABMBG7Y3WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOJTGQZDQMJQGU . You are receiving this because you were mentioned.Message ID: @.***>

carlosrcoelho commented 2 months ago

O que você quer dizer usando VSCODE?

Eu usei a versão main do Langflow. Se puder gravar um pequeno video do processo que está realizando, me ajuda.

E também mandar um print dos logs do backend apontando o erro.

carlosrcoelho commented 2 months ago

Thank you for your contribution! This issue will be closed. If you have any questions or encounter another problem, please open a new issue and we will be ready to assist you.

McCalebTheSecond commented 2 months ago

I had the same issue on Windows 11 and resolved it. It seems to be an issue with slashes being different between linux and windows. Anyway, I simply replaced a line in the image.py file.

From: flow_id, file_name = file.split("/")

To: flow_id, file_name = re.split(r"[\\/]", file, maxsplit=1)

I added import re to the file as well.

FYI, I'm not a real developer. I just poked around and used ChatGPT.