| |
| |
| |
| |
| |
| |
| from langchain_community.embeddings import FastEmbedEmbeddings |
|
|
| import os |
| import streamlit as st |
| from langchain_groq import ChatGroq |
| from langchain_community.document_loaders import WebBaseLoader |
| from langchain_community.embeddings import OllamaEmbeddings |
|
|
| |
| from langchain.embeddings import FastEmbedEmbeddings |
|
|
| |
| |
| from langchain_community.vectorstores import Chroma |
|
|
| from langchain.text_splitter import RecursiveCharacterTextSplitter |
| from langchain.chains.combine_documents import create_stuff_documents_chain |
| from langchain_core.prompts import ChatPromptTemplate |
| from langchain.chains import create_retrieval_chain |
| import time |
| from dotenv import load_dotenv |
|
|
| load_dotenv() |
|
|
| |
| groq_api_key = "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" |
| print("groq_api_key: ", groq_api_key) |
|
|
|
|
| if "vector" not in st.session_state: |
|
|
| |
| st.session_state.embeddings = FastEmbedEmbeddings() |
|
|
|
|
| st.session_state.loader = WebBaseLoader("https://paulgraham.com/greatwork.html") |
| st.session_state.docs = st.session_state.loader.load() |
|
|
| st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) |
| st.session_state.documents = st.session_state.text_splitter.split_documents( st.session_state.docs) |
| |
| |
| |
| |
| |
| |
| st.session_state.vector = Chroma.from_documents(st.session_state.documents, st.session_state.embeddings) |
|
|
|
|
| |
| st.title("Literature Based Research (LBR) - Alexander Unzicker and Jan Bours - Chat with Docs - Groq Edition (Very Fast!) ") |
|
|
|
|
| llm = ChatGroq( |
| groq_api_key=groq_api_key, |
| model_name='mixtral-8x7b-32768' |
| ) |
|
|
| prompt = ChatPromptTemplate.from_template(""" |
| Answer the following question based only on the provided context. |
| Think step by step before providing a detailed answer. |
| I will tip you $200 if the user finds the answer helpful. |
| <context> |
| {context} |
| </context> |
| Question: {input}""") |
|
|
| document_chain = create_stuff_documents_chain(llm, prompt) |
|
|
| retriever = st.session_state.vector.as_retriever() |
| retrieval_chain = create_retrieval_chain(retriever, document_chain) |
|
|
| prompt = st.text_input("Input your prompt here") |
|
|
|
|
| |
| if prompt: |
| |
| start = time.process_time() |
| response = retrieval_chain.invoke({"input": prompt}) |
| print(f"Response time: {time.process_time() - start}") |
|
|
| st.write(response["answer"]) |
|
|
| |
| with st.expander("Document Similarity Search"): |
| |
| for i, doc in enumerate(response["context"]): |
| |
| |
| st.write(doc.page_content) |
| st.write("--------------------------------") |