import streamlit as st from langchain_google_genai import ChatGoogleGenerativeAI from langchain_core.runnables import RunnablePassthrough import os from dotenv import load_dotenv load_dotenv() from langchain_community.document_loaders import WebBaseLoader from langchain.vectorstores import FAISS from langchain_core.output_parsers import StrOutputParser from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.prompts import ChatPromptTemplate from langchain_huggingface import HuggingFaceEmbeddings st.title("Ask From Website") user_url = st.text_input("Enter your URL here") user_question = st.text_input("Enter your question from the website:") query_button = st.button("View Results") def data_ingestion(path): loader = WebBaseLoader(path) data = loader.load() return data def VectorStore(data, embedding): splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=500) chunks = splitter.split_documents(data) vector = FAISS.from_documents(chunks, embedding) retriever = vector.as_retriever() return retriever def prompt_helper(): template = """ Answer Based on the following context: {context} Question: {question} Provide only helpful information. """ prompt = ChatPromptTemplate.from_template(template) return prompt def main(): if user_url and user_question: data = data_ingestion(user_url) retriever = VectorStore(data, embedding) prompt = prompt_helper() chain = ( {'context': retriever, 'question': RunnablePassthrough()} | prompt | llm | StrOutputParser() ) response = chain.invoke(user_question) return response llm = ChatGoogleGenerativeAI(model='gemini-1.5-flash') embedding = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2') if query_button: response = main() if response: st.markdown(response)