Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problema com Conectores de Saída ao Criar Text Splitters no Módulo Experimental #3833

Closed
moiraphill opened this issue Sep 17, 2024 · 7 comments
Assignees
Labels
bug Something isn't working

Comments

@moiraphill
Copy link

moiraphill commented Sep 17, 2024

Bug Description

Recentemente, identifiquei um erro ao criar text splitters utilizando o módulo Experimental do Langflow. Esse problema afeta os conectores de saída, onde apenas os conectores existentes em versões anteriores do Langflow continuam funcionando corretamente. Os conectores recém-criados exibem comportamento alterado e não conseguem se conectar com outros componentes. Especificamente, o conector de saída (Data) fica com a cor rosa e exibe a mensagem de que não há componentes compatíveis disponíveis.

Exemplo Visual:

image

Na imagem acima:

Conector Superior: Criado em versões anteriores do Langflow, funcionando normalmente.
Conector Inferior: Criado na versão mais recente (1.0.18), não consegue se conectar com nenhum outro componente na saída "Data".

Informações Adicionais:

Versão do Langflow: 1.0.18

Ambiente:

  • Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-44-generic x86_64)
  • Docker version 27.2.1, build 9e34c9b
  • Docker Compose version v2.29.1
  • Imagens Docker:
    • python:3.12-slim (pip install langflow) - Python Version: 3.12.3
    • postgres:16

Reproduction

  1. Acesse o módulo Experimental do Langflow.
  2. Crie um novo text splitter.
  3. Tente conectar a saída (Data) desse text splitter a outro conector existente.

Expected behavior

Comportamento Esperado: Os conectores recém-criados devem se comportar de maneira semelhante aos conectores de versões anteriores, permitindo conexões com outros componentes sem apresentar erros visuais ou mensagens de incompatibilidade.

Comportamento Atual: Os conectores novos apresentam a saída (Data) na cor rosa e indicam que não há componentes compatíveis, impedindo a conexão com outros conectores.

Who can help?

No response

Operating System

Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-44-generic x86_64)

Langflow Version

1.0.18

Python Version

3.12

Screenshot

No response

Flow File

No response

@moiraphill moiraphill added the bug Something isn't working label Sep 17, 2024
Copy link

dosubot bot commented Sep 17, 2024

Para resolver o problema com os conectores de saída ao criar text splitters no módulo Experimental do Langflow versão 1.0.18, você precisa garantir que o tipo de saída do método split_text na classe SplitTextComponent esteja corretamente definido e seja compatível com outros componentes.

Aqui está o trecho relevante do código:

def split_text(self) -> List[Data]:
    separator = unescape_string(self.separator)

    documents = []
    for _input in self.data_inputs:
        if isinstance(_input, Data):
            documents.append(_input.to_lc_document())

    splitter = CharacterTextSplitter(
        chunk_overlap=self.chunk_overlap,
        chunk_size=self.chunk_size,
        separator=separator,
    )
    docs = splitter.split_documents(documents)
    data = self._docs_to_data(docs)
    self.status = data
    return data

Certifique-se de que os componentes aos quais você está tentando conectar a saída "Data" possam aceitar List[Data] como entrada. Se não puderem, você pode precisar ajustar o tipo de saída do text splitter ou o tipo de entrada dos outros componentes para garantir a compatibilidade.

Além disso, verifique se a classe SplitTextComponent está corretamente definida com as entradas e saídas apropriadas. Aqui está a definição completa da classe para referência:

from typing import List

from langchain_text_splitters import CharacterTextSplitter

from langflow.custom import Component
from langflow.io import HandleInput, IntInput, MessageTextInput, Output
from langflow.schema import Data
from langflow.utils.util import unescape_string

class SplitTextComponent(Component):
    display_name: str = "Split Text"
    description: str = "Split text into chunks based on specified criteria."
    icon = "scissors-line-dashed"
    name = "SplitText"

    inputs = [
        HandleInput(
            name="data_inputs",
            display_name="Data Inputs",
            info="The data to split.",
            input_types=["Data"],
            is_list=True,
        ),
        IntInput(
            name="chunk_overlap",
            display_name="Chunk Overlap",
            info="Number of characters to overlap between chunks.",
            value=200,
        ),
        IntInput(
            name="chunk_size",
            display_name="Chunk Size",
            info="The maximum number of characters in each chunk.",
            value=1000,
        ),
        MessageTextInput(
            name="separator",
            display_name="Separator",
            info="The character to split on. Defaults to newline.",
            value="\n",
        ),
    ]

    outputs = [
        Output(display_name="Chunks", name="chunks", method="split_text"),
    ]

    def _docs_to_data(self, docs):
        data = []
        for doc in docs:
            data.append(Data(text=doc.page_content, data=doc.metadata))
        return data

    def split_text(self) -> List[Data]:
        separator = unescape_string(self.separator)

        documents = []
        for _input in self.data_inputs:
            if isinstance(_input, Data):
                documents.append(_input.to_lc_document())

        splitter = CharacterTextSplitter(
            chunk_overlap=self.chunk_overlap,
            chunk_size=self.chunk_size,
            separator=separator,
        )
        docs = splitter.split_documents(documents)
        data = self._docs_to_data(docs)
        self.status = data
        return data

Certifique-se também de que a classe TextSplitterCreator esteja configurada corretamente para lidar com os tipos de text splitter. Aqui está a parte relevante da classe TextSplitterCreator:

from typing import Dict, List, Optional, Type

from langflow.interface.base import LangChainTypeCreator
from langflow.services.deps import get_settings_service
from langflow.template.frontend_node.textsplitters import TextSplittersFrontendNode
from langflow.interface.custom_lists import textsplitter_type_to_cls_dict

from loguru import logger
from langflow.utils.util import build_template_from_class

class TextSplitterCreator(LangChainTypeCreator):
    type_name: str = "textsplitters"

    @property
    def frontend_node_class(self) -> Type[TextSplittersFrontendNode]:
        return TextSplittersFrontendNode

    @property
    def type_to_loader_dict(self) -> Dict:
        return textsplitter_type_to_cls_dict

    def get_signature(self, name: str) -> Optional[Dict]:
        """Get the signature of a text splitter."""
        try:
            return build_template_from_class(name, textsplitter_type_to_cls_dict)
        except ValueError as exc:
            raise ValueError(f"Text Splitter {name} not found") from exc
        except AttributeError as exc:
            logger.error(f"Text Splitter {name} not loaded: {exc}")
            return None

    def to_list(self) -> List[str]:
        settings_service = get_settings_service()
        return [
            textsplitter.__name__
            for textsplitter in self.type_to_loader_dict.values()
            if textsplitter.__name__ in settings_service.settings.TEXTSPLITTERS or settings_service.settings.DEV
        ]

textsplitter_creator = TextSplitterCreator()

Ao garantir que a classe SplitTextComponent e seus métodos estejam corretamente definidos e que os tipos de saída sejam compatíveis com outros componentes, você deve conseguir resolver o problema com o conector de saída "Data" [1][2][3][4].

To continue talking to Dosu, mention @dosu.

@carlosrcoelho
Copy link
Contributor

@moiraphill

Realizei o teste na versão 1.0.18 e está conectando e funcionando conforme esperado.

image

Consegue realizar novo teste?

@anovazzi1
Copy link
Contributor

stale

@moiraphill
Copy link
Author

@moiraphill

Realizei o teste na versão 1.0.18 e está conectando e funcionando conforme esperado.

image Consegue realizar novo teste?

Olá, realizei novo teste instalando diretamente com pip em um ambiente virtual python e eu continuo com o mesmo erro.
No seu caso, você criou um novo workflow ou usou um workflow já criado ?

@anovazzi1 anovazzi1 reopened this Oct 1, 2024
@carlosrcoelho
Copy link
Contributor

carlosrcoelho commented Oct 1, 2024

@moiraphill

Eu fiz o teste diretamente na branch 'main'.

Agora fiz o teste via 'pip' e realmente não está conectando.

Em breve sairá um novo release que irá corrigir isso na versão 'pip'.

@Banbury
Copy link

Banbury commented Oct 10, 2024

In v1.0.18 I can't connect the character splitters with any vector store either. No error message. The color of the outputs is purple instead of red.

@carlosrcoelho
Copy link
Contributor

Hey @Banbury @moiraphill

The new version 1.0.19 has been released, and the issue has been fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants