Spaces:
Runtime error
Runtime error
langchain-qa-bot
/
docs
/langchain
/templates
/hybrid-search-weaviate
/hybrid_search_weaviate
/chain.py
import os | |
import weaviate | |
from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever | |
from langchain_community.chat_models import ChatOpenAI | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain_core.prompts import ChatPromptTemplate | |
from langchain_core.runnables import RunnableParallel, RunnablePassthrough | |
# Check env vars | |
if os.environ.get("WEAVIATE_API_KEY", None) is None: | |
raise Exception("Missing `WEAVIATE_API_KEY` environment variable.") | |
if os.environ.get("WEAVIATE_ENVIRONMENT", None) is None: | |
raise Exception("Missing `WEAVIATE_ENVIRONMENT` environment variable.") | |
if os.environ.get("WEAVIATE_URL", None) is None: | |
raise Exception("Missing `WEAVIATE_URL` environment variable.") | |
if os.environ.get("OPENAI_API_KEY", None) is None: | |
raise Exception("Missing `OPENAI_API_KEY` environment variable.") | |
# Initialize the retriever | |
WEAVIATE_INDEX_NAME = os.environ.get("WEAVIATE_INDEX", "langchain-test") | |
WEAVIATE_URL = os.getenv("WEAVIATE_URL") | |
auth_client_secret = (weaviate.AuthApiKey(api_key=os.getenv("WEAVIATE_API_KEY")),) | |
client = weaviate.Client( | |
url=WEAVIATE_URL, | |
additional_headers={ | |
"X-Openai-Api-Key": os.getenv("OPENAI_API_KEY"), | |
}, | |
) | |
retriever = WeaviateHybridSearchRetriever( | |
client=client, | |
index_name=WEAVIATE_INDEX_NAME, | |
text_key="text", | |
attributes=[], | |
create_schema_if_missing=True, | |
) | |
# # Ingest code - you may need to run this the first time | |
# # Load | |
# loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/") | |
# data = loader.load() | |
# | |
# # Split | |
# text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0) | |
# all_splits = text_splitter.split_documents(data) | |
# | |
# # Add to vectorDB | |
# retriever.add_documents(all_splits) | |
# RAG prompt | |
template = """Answer the question based only on the following context: | |
{context} | |
Question: {question} | |
""" | |
prompt = ChatPromptTemplate.from_template(template) | |
# RAG | |
model = ChatOpenAI() | |
chain = ( | |
RunnableParallel({"context": retriever, "question": RunnablePassthrough()}) | |
| prompt | |
| model | |
| StrOutputParser() | |
) | |