import os | |
import random | |
import gradio as gr | |
from langchain_community.document_loaders import PyPDFLoader | |
from langchain_text_splitters import RecursiveCharacterTextSplitter | |
from langchain_huggingface import HuggingFaceEmbeddings | |
from langchain_community.vectorstores import FAISS | |
from langchain.chains import RetrievalQA | |
from langchain_groq import ChatGroq | |
from langchain_core.prompts import PromptTemplate | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain_core.runnables import RunnablePassthrough | |
# Initialize the FAISS vector store | |
vector_store = None | |
# Sample PDF file | |
sample_filename = "Attention Is All You Need.pdf" | |
examples_questions = [["What is Transformer?"], | |
["What is Attention?"], | |
["What is Scaled Dot-Product Attention?"], | |
["What are Encoder and Decoder?"], | |
["Describe more about the Transformer."], | |
["Why use self-attention?"], | |
] | |
template = \ | |
"""Use the following pieces of context to answer the question at the end. | |
If you don't know the answer, just say that you don't know, don't try to make up an answer. | |
Always say "Thanks for asking!" at the end of the answer. | |
{context} | |
Question: {question} | |
Answer: | |
""" | |
def greet(name): | |
return f"Hello, {name}!" | |
# def format_docs(docs): | |
# return "\n\n".join(doc.page_content for doc in docs) | |
# def generate_response(query, history, model, temperature, max_tokens, top_p, seed): | |
# if vector_store is None: | |
# return "Please upload and index a PDF at the Indexing tab." | |
# if seed == 0: | |
# seed = random.randint(1, 100000) | |
# retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 16}) | |
# llm = ChatGroq(groq_api_key=os.environ.get("GROQ_API_KEY"), model=model) | |
# custom_rag_prompt = PromptTemplate.from_template(template) | |
# rag_chain = ( | |
# {"context": retriever | format_docs, "question": RunnablePassthrough()} | |
# | custom_rag_prompt | |
# | llm | |
# | StrOutputParser() | |
# ) | |
# response = rag_chain.invoke(query) | |
# return response | |
# additional_inputs = [ | |
# gr.Dropdown(choices=["llama-3.1-70b-versatile", "llama-3.1-8b-instant", "llama3-70b-8192", "llama3-8b-8192", "mixtral-8x7b-32768", "gemma2-9b-it", "gemma-7b-it"], value="llama-3.1-70b-versatile", label="Model"), | |
# gr.Slider(minimum=0.0, maximum=1.0, step=0.01, value=0.5, label="Temperature", info="Controls diversity of the generated text. Lower is more deterministic, higher is more creative."), | |
# gr.Slider(minimum=1, maximum=8000, step=1, value=8000, label="Max Tokens", info="The maximum number of tokens that the model can process in a single response.<br>Maximums: 8k for gemma 7b it, gemma2 9b it, llama 7b & 70b, 32k for mixtral 8x7b, 132k for llama 3.1."), | |
# gr.Slider(minimum=0.0, maximum=1.0, step=0.01, value=0.5, label="Top P", info="A method of text generation where a model will only consider the most probable next tokens that make up the probability p."), | |
# gr.Number(precision=0, value=0, label="Seed", info="A starting point to initiate generation, use 0 for random") | |
# ] | |
with gr.Blocks(theme="Nymbo/Alyx_Theme") as demo: | |
# Set the title and description for the app. | |
gr.Markdown("# Simple Gradio Greeter") | |
gr.Markdown("Enter your name and get a personalized greeting!") | |
# Define the input component (a text box for the name). | |
name_input = gr.Textbox( | |
lines=2, | |
placeholder="Enter your name here...", | |
label="Your Name" | |
) | |
# Define the output component (a text box for the greeting). | |
greeting_output = gr.Textbox(label="Greeting") | |
# Add a button that will trigger the 'greet' function when clicked. | |
# The 'fn' argument specifies the function to call. | |
# The 'inputs' argument specifies which component's value to pass to 'fn'. | |
# The 'outputs' argument specifies which component will display the return value of 'fn'. | |
submit_button = gr.Button("Get Greeting") | |
submit_button.click( | |
fn=greet, | |
inputs=name_input, | |
outputs=greeting_output | |
) | |
# Launch the Gradio app. | |
# The `share=True` argument creates a public, shareable link (useful for demos). | |
# In a local environment, it will also open a local URL. | |
demo.launch() | |