File size: 1,352 Bytes
a3676a0 3992bac 38840d9 a3676a0 3992bac 38840d9 3992bac 38840d9 3992bac 38840d9 a3676a0 38840d9 a3676a0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import gradio as gr
from datasets import load_dataset
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# Load dataset
ds = load_dataset("STEM-AI-mtl/Electrical-engineering", split="train")
# Combine input (question) and output (answer) for vectorization
docs = [inp + " " + out for inp, out in zip(ds["input"], ds["output"])]
vectorizer = TfidfVectorizer().fit(docs)
tfidf_matrix = vectorizer.transform(docs)
# Retrieval function
def retrieve_answer(user_q, top_k=1):
vec = vectorizer.transform([user_q])
sims = cosine_similarity(vec, tfidf_matrix).flatten()
idxs = np.argsort(-sims)[:top_k]
return "\n\n".join([f"**Q:** {ds['input'][i]}\n**A:** {ds['output'][i]}" for i in idxs])
# Gradio app
with gr.Blocks() as demo:
gr.Markdown("# 🤖 Electronics Engineering Q&A Chatbot")
gr.Markdown("Ask any electronics-related question and get an AI-assisted answer based on a curated dataset.")
with gr.Row():
user_q = gr.Textbox(label="Your Question", lines=2, placeholder="e.g. What is the purpose of a Zener diode?")
answer_box = gr.Markdown(label="Answer")
submit_btn = gr.Button("Get Answer")
submit_btn.click(fn=retrieve_answer, inputs=user_q, outputs=answer_box)
if __name__ == "__main__":
demo.launch()
|