Spaces:
Running
Running
from langchain.retrievers import MultiQueryRetriever | |
from langflow.custom import CustomComponent | |
from langflow.field_typing import BaseRetriever, LanguageModel, PromptTemplate, Text | |
class MultiQueryRetrieverComponent(CustomComponent): | |
display_name = "MultiQueryRetriever" | |
description = "Initialize from llm using default template." | |
documentation = "https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever" | |
name = "MultiQueryRetriever" | |
legacy: bool = True | |
def build_config(self): | |
return { | |
"llm": {"display_name": "LLM"}, | |
"prompt": { | |
"display_name": "Prompt", | |
"default": { | |
"input_variables": ["question"], | |
"input_types": {}, | |
"output_parser": None, | |
"partial_variables": {}, | |
"template": "You are an AI language model assistant. Your task is \n" | |
"to generate 3 different versions of the given user \n" | |
"question to retrieve relevant documents from a vector database. \n" | |
"By generating multiple perspectives on the user question, \n" | |
"your goal is to help the user overcome some of the limitations \n" | |
"of distance-based similarity search. Provide these alternative \n" | |
"questions separated by newlines. Original question: {question}", | |
"template_format": "f-string", | |
"validate_template": False, | |
"_type": "prompt", | |
}, | |
}, | |
"retriever": {"display_name": "Retriever"}, | |
"parser_key": {"display_name": "Parser Key", "default": "lines"}, | |
} | |
def build( | |
self, | |
llm: LanguageModel, | |
retriever: BaseRetriever, | |
prompt: Text | None = None, | |
parser_key: str = "lines", | |
) -> MultiQueryRetriever: | |
if not prompt: | |
return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, parser_key=parser_key) | |
prompt_template = PromptTemplate.from_template(prompt) | |
return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, prompt=prompt_template, parser_key=parser_key) | |