Spaces:
Runtime error
Runtime error
import os | |
from dotenv import load_dotenv | |
import gradio as gr | |
from llama_index.core import StorageContext, load_index_from_storage, VectorStoreIndex, SimpleDirectoryReader, ChatPromptTemplate | |
from llama_index.llms.huggingface import HuggingFaceInferenceAPI | |
from llama_index.embeddings.huggingface import HuggingFaceEmbedding | |
from sentence_transformers import SentenceTransformer | |
from llama_index.core import StorageContext, load_index_from_storage, VectorStoreIndex, SimpleDirectoryReader, ChatPromptTemplate, Settings | |
load_dotenv() | |
# Configure the Llama index settings | |
Settings.llm = HuggingFaceInferenceAPI( | |
model_name="google/gemma-1.1-7b-it", | |
tokenizer_name="google/gemma-1.1-7b-it", | |
context_window=3000, | |
token=os.getenv("HF_TOKEN"), | |
max_new_tokens=512, | |
generate_kwargs={"temperature": 0.1}, | |
) | |
Settings.embed_model = HuggingFaceEmbedding( | |
model_name="BAAI/bge-small-en-v1.5" | |
) | |
# Define the directory for persistent storage and data | |
PERSIST_DIR = "db" | |
PDF_DIRECTORY = 'data' # Changed to the directory containing PDFs | |
# Ensure PDF directory exists | |
os.makedirs(PDF_DIRECTORY, exist_ok=True) | |
os.makedirs(PERSIST_DIR, exist_ok=True) | |
def data_ingestion_from_directory(): | |
# Use SimpleDirectoryReader on the directory containing the PDF files | |
documents = SimpleDirectoryReader(PDF_DIRECTORY).load_data() | |
storage_context = StorageContext.from_defaults() | |
index = VectorStoreIndex.from_documents(documents) | |
index.storage_context.persist(persist_dir=PERSIST_DIR) | |
def handle_query(query): | |
chat_text_qa_msgs = [ | |
( | |
"user", | |
""" | |
You are now the RedfernsTech chatbot. Your aim is to provide the best user experience and give me best answer to the user only one answer. talk like professional chatbot your now my redfernstech chatbot | |
and If anyone asks you personal questions, direct them to ask for details about the company. | |
Context: | |
{context_str} | |
Question: | |
{query_str} | |
""" | |
) | |
] | |
text_qa_template = ChatPromptTemplate.from_messages(chat_text_qa_msgs) | |
# Load index from storage | |
storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR) | |
index = load_index_from_storage(storage_context) | |
query_engine = index.as_query_engine(text_qa_template=text_qa_template) | |
answer = query_engine.query(query) | |
if hasattr(answer, 'response'): | |
return answer.response | |
elif isinstance(answer, dict) and 'response' in answer: | |
return answer['response'] | |
else: | |
return "Sorry, I couldn't find an answer." | |
# Example usage | |
# Process PDF ingestion from directory | |
print("Processing PDF ingestion from directory:", PDF_DIRECTORY) | |
data_ingestion_from_directory() | |
# Example query | |
query = "How do I use the RedfernsTech Q&A assistant?" | |
print("Query:", query) | |
response = handle_query(query) | |
print("Answer:", response) | |
# prompt: create a gradio chatbot for this | |
# Define the input and output components for the Gradio interface | |
input_component = gr.Textbox( | |
show_label=False, | |
placeholder="Ask me anything about the document..." | |
) | |
output_component = gr.Textbox() | |
# Create the Gradio interface | |
interface = gr.Interface( | |
fn=handle_query, | |
inputs=input_component, | |
outputs=output_component, | |
title="RedfernsTech Q&A Chatbot", | |
description="Ask me anything about the uploaded document." | |
) | |
# Launch the Gradio interface | |
interface.launch() | |