llama3.2-tafsir / app.py
tfulanchan
Merge branch 'main' of https://huggingface.co/spaces/chanhen/llama3.2-tafsir
73b315c
import os
import gradio as gr
from huggingface_hub import InferenceClient
import markdown
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Function to read and process Markdown files from the 'data' directory and its subfolders
def load_markdown_files(data_folder='data'):
documents = []
for root, dirs, files in os.walk(data_folder):
for filename in files:
if filename.endswith('.md'):
file_path = os.path.join(root, filename)
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# Convert Markdown to plain text if needed
html_content = markdown.markdown(content)
documents.append(html_content) # Store HTML content or plain text
except Exception as e:
print(f"Error reading {file_path}: {e}")
return documents
# Load documents at startup
documents = load_markdown_files()
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
# Retrieve relevant context from loaded documents based on the user message
relevant_contexts = retrieve_relevant_context(message, documents)
# Add retrieved contexts to the messages for better responses
messages.append({"role": "context", "content": " ".join(relevant_contexts)})
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
def retrieve_relevant_context(query, documents):
# Simple keyword matching to find relevant documents
relevant_contexts = []
for doc in documents:
if query.lower() in doc.lower(): # Basic keyword search
relevant_contexts.append(doc)
return relevant_contexts[:3] # Return top 3 relevant contexts
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value="You are a friendly Chatbot. Only answer questions that you have knowledge of, in the language of Traditional Chinese.", label="System message"),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
)
#To create a public link, set `share=True` in `launch()`.
if __name__ == "__main__":
demo.launch(share=True)