---------------------------------------------------------------------------
ComponentError Traceback (most recent call last)
Cell In[11], line 2
1 @component
----> 2 def model_embedder(self, documents,cache_dir=cache_dir):
4 tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir)
File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:517, in _Component.__call__(self, cls, is_greedy)
513 return self._component(cls, is_greedy=is_greedy)
515 if cls:
516 # Decorator is called without parens
--> 517 return wrap(cls)
519 # Decorator is called with parens
520 return wrap
File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:513, in _Component.__call__..wrap(cls)
512 def wrap(cls):
--> 513 return self._component(cls, is_greedy=is_greedy)
File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:464, in _Component._component(self, cls, is_greedy)
462 # Check for required methods and fail as soon as possible
463 if not hasattr(cls, "run"):
--> 464 raise ComponentError(f"{cls.__name__} must have a 'run()' method. See the docs for more information.")
466 def copy_class_namespace(namespace):
...
469
470 Simply copy the whole namespace from the decorated class.
471 """
ComponentError: model_embedder must have a 'run()' method. See the docs for more information.
И если я не использую декоратор @comComponent (и удаляю self из обеих функций), эти функции компилируются, но затем, когда я запускаю rag_pipeline< /code> код, я получаю следующую ошибку:
---------------------------------------------------------------------------
PipelineValidationError Traceback (most recent call last)
Cell In[13], line 6
2 rag_pipeline.add_component("converter", MarkdownToDocument())
3 rag_pipeline.add_component(
4 "splitter", DocumentSplitter(split_by="sentence", split_length=2)
5 )
----> 6 rag_pipeline.add_component("embedder", model_embedder)
7 rag_pipeline.add_component(document_store)
8 rag_pipeline.add_component(
9 "retriever", MilvusEmbeddingRetriever(document_store=document_store, top_k=3)
10 )
File /.../rag_env/lib/python3.10/site-packages/haystack/core/pipeline/base.py:313, in PipelineBase.add_component(self, name, instance)
311 # Component instances must be components
312 if not isinstance(instance, Component):
--> 313 raise PipelineValidationError(
314 f"'{type(instance)}' doesn't seem to be a component. Is this class decorated with @component?"
315 )
317 if getattr(instance, "__haystack_added_to_pipeline__", None):
318 msg = (
319 "Component has already been added in another Pipeline. Components can't be shared between Pipelines. "
320 "Create a new instance instead."
321 )
PipelineValidationError: '' doesn't seem to be a component. Is this class decorated with @component?
import os
import urllib.request
from haystack import Pipeline
from haystack.components.converters import MarkdownToDocument
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
from milvus_haystack import MilvusDocumentStore
from milvus_haystack.milvus_embedding_retriever import MilvusEmbeddingRetriever
from haystack.components.builders import PromptBuilder
import mdit_plain
from haystack import component
import huggingface_hub
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import torch
Поскольку я подозреваю, что могут быть какие-то проблемы (/несовместимость) с библиотеками Haystack, которые я использую, я показываю здесь все библиотеки и версии, связанные с Haystack, которые у меня есть в текущей среде:< /p>
Я пытаюсь запустить конвейер RAG с использованием Haystack (и Milvus) на своем экземпляре кластера с использованием Python (3.10.12).
Показаны импортированные и соответствующие пакеты, которые у меня есть в этой среде. в конце этого вопроса. мой код:
[list] [*]встраивание модели и функции генератора: [/list] [code]@component def model_embedder(self, documents,cache_dir=cache_dir): tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir) model = AutoModelForSeq2SeqLM.from_pretrained(mymodel, cache_dir=cache_dir)
embeddings = [] for doc in documents: inputs = tokenizer(doc.content, padding="max_length", truncation=True, return_tensors="pt") with torch.no_grad(): output = model(**inputs) embedding = output.pooler_output.squeeze(0).cpu().numpy() embeddings.append(embedding)
for doc, embedding in zip(documents, embeddings): doc.embedding = embedding return documents
[/code] Если я декорирую @comComponent, я получаю следующую ошибку: [code]--------------------------------------------------------------------------- ComponentError Traceback (most recent call last) Cell In[11], line 2 1 @component ----> 2 def model_embedder(self, documents,cache_dir=cache_dir): 4 tokenizer = AutoTokenizer.from_pretrained(mymodel, cache_dir=cache_dir)
File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:517, in _Component.__call__(self, cls, is_greedy) 513 return self._component(cls, is_greedy=is_greedy) 515 if cls: 516 # Decorator is called without parens --> 517 return wrap(cls) 519 # Decorator is called with parens 520 return wrap
File /.../rag_env/lib/python3.10/site-packages/haystack/core/component/component.py:464, in _Component._component(self, cls, is_greedy) 462 # Check for required methods and fail as soon as possible 463 if not hasattr(cls, "run"): --> 464 raise ComponentError(f"{cls.__name__} must have a 'run()' method. See the docs for more information.") 466 def copy_class_namespace(namespace): ... 469 470 Simply copy the whole namespace from the decorated class. 471 """
ComponentError: model_embedder must have a 'run()' method. See the docs for more information. [/code] И если я не использую декоратор @comComponent (и удаляю self из обеих функций), эти функции компилируются, но затем, когда я запускаю rag_pipeline< /code> код, я получаю следующую ошибку: [code]--------------------------------------------------------------------------- PipelineValidationError Traceback (most recent call last) Cell In[13], line 6 2 rag_pipeline.add_component("converter", MarkdownToDocument()) 3 rag_pipeline.add_component( 4 "splitter", DocumentSplitter(split_by="sentence", split_length=2) 5 ) ----> 6 rag_pipeline.add_component("embedder", model_embedder) 7 rag_pipeline.add_component(document_store) 8 rag_pipeline.add_component( 9 "retriever", MilvusEmbeddingRetriever(document_store=document_store, top_k=3) 10 )
File /.../rag_env/lib/python3.10/site-packages/haystack/core/pipeline/base.py:313, in PipelineBase.add_component(self, name, instance) 311 # Component instances must be components 312 if not isinstance(instance, Component): --> 313 raise PipelineValidationError( 314 f"'{type(instance)}' doesn't seem to be a component. Is this class decorated with @component?" 315 ) 317 if getattr(instance, "__haystack_added_to_pipeline__", None): 318 msg = ( 319 "Component has already been added in another Pipeline. Components can't be shared between Pipelines. " 320 "Create a new instance instead." 321 )
PipelineValidationError: '' doesn't seem to be a component. Is this class decorated with @component? [/code] Я использую следующие варианты импорта: [code]import os import urllib.request
from haystack import Pipeline from haystack.components.converters import MarkdownToDocument
from haystack.components.preprocessors import DocumentSplitter from haystack.components.writers import DocumentWriter
from milvus_haystack import MilvusDocumentStore from milvus_haystack.milvus_embedding_retriever import MilvusEmbeddingRetriever
from haystack.components.builders import PromptBuilder
import mdit_plain from haystack import component
import huggingface_hub from transformers import AutoModelForSeq2SeqLM, AutoTokenizer import torch [/code] Поскольку я подозреваю, что могут быть какие-то проблемы (/несовместимость) с библиотеками Haystack, которые я использую, я показываю здесь все библиотеки и версии, связанные с Haystack, которые у меня есть в текущей среде:< /p> [code]Package Version ---------------------------- -------------- farm-haystack 1.26.3 haystack 0.42 haystack-ai 2.5.1 haystack-experimental 0.2.0 milvus-haystack 0.0.10 [/code] Я буду рад получить любые предложения или помощь, как решить проблему и запустить конвейер RAG.
Я строю Q & A WebApp с Elasticsearch. Я только что успешно установил Farm-haystack == 1.3.0 и ферма с требованиями. Txt.
Теперь, когда я импортирую библиотеку, она выявляет ошибку:
from haystack.document_store.elasticsearch import...