Vishal1806's picture
new
890dc71 verified
raw
history blame
3.4 kB
import gradio as gr
from huggingface_hub import InferenceClient
import pandas as pd
import torch
from sentence_transformers import SentenceTransformer
# Initialize the Hugging Face API client
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Load and preprocess course data for search functionality
courses_df = pd.read_csv("courses_data.csv") # Assuming courses_data.csv is already scraped
model = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens')
courses_df['embedding'] = courses_df['description'].apply(lambda x: model.encode(x, convert_to_tensor=True))
# Define a helper function to search for courses based on user query
def search_courses(query, top_k=5):
query_embedding = model.encode(query, convert_to_tensor=True)
cosine_scores = torch.nn.functional.cosine_similarity(query_embedding, torch.stack(courses_df['embedding'].tolist()))
top_results = torch.topk(cosine_scores, k=top_k)
results = []
for idx in top_results.indices:
course = courses_df.iloc[idx.item()]
results.append(f"**{course['title']}**\n{course['description']}\nNumber of Lessons: {course['lessons']}")
return "\n\n".join(results)
# Modify respond function to include course search when "search: [query]" is detected
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
# Check if the message is a course search command
if message.lower().startswith("search:"):
query = message[len("search:"):].strip() # Extract search query
response = search_courses(query) # Perform course search
yield response
return
# Standard chat processing using Hugging Face Inference API for general chat
messages = [{"role": "system", "content": system_message}]
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
# Gradio chat interface setup
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value="You are a helpful assistant that provides detailed information about courses on Analytics Vidhya. Please assist the user by answering questions about available courses, course content, instructors, ratings, pricing, and any other relevant details. If a user asks about course recommendations, suggest relevant courses based on their needs or preferences.", 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)",
),
],
description="Type 'search: [your query]' to search for courses on Analytics Vidhya, or chat with the assistant."
)
# Launch the app
if __name__ == "__main__":
demo.launch()