palevector/training-courses-chatbot
0
1import os2import pickle3import faiss4import gradio as gr5from huggingface_hub import InferenceClient6from sentence_transformers import SentenceTransformer7 8# Build RAG index on first run9if not os.path.exists("rag/index.faiss"):10 os.system("python rag/build_index.py")11 12# Load system prompt13with open("system_prompt.txt", "r", encoding="utf-8") as f:14 SYSTEM_PROMPT = f.read()15 16# Load embeddings and FAISS index17embedder = SentenceTransformer("all-MiniLM-L6-v2")18index = faiss.read_index("rag/index.faiss")19 20with open("rag/texts.pkl", "rb") as f:21 documents = pickle.load(f)22 23def respond(message, history, system_message, max_tokens, temperature, top_p, hf_token):24 if not message.strip():25 yield "Hi ๐ How can I help you with course details today?"26 return27 28 # Retrieve relevant course info29 query_embedding = embedder.encode([message])30 _, indices = index.search(query_embedding, k=3)31 context = "\n\n".join([documents[i] for i in indices[0]])32 33 client = InferenceClient(34 token=hf_token.token,35 model="google/flan-t5-large"36 )37 38 messages = [39 {40 "role": "system",41 "content": f"""42{SYSTEM_PROMPT}43 44Use ONLY the information below.45If the answer is not present, ask a clarifying question.46 47COURSE INFORMATION:48{context}49"""50 }51 ]52 53 messages.extend(history)54 messages.append({"role": "user", "content": message})55 56 response = ""57 for msg in client.chat_completion(58 messages,59 max_tokens=max_tokens,60 stream=True,61 temperature=temperature,62 top_p=top_p,63 ):64 if msg.choices and msg.choices[0].delta.content:65 response += msg.choices[0].delta.content66 yield response67 68chatbot = gr.ChatInterface(69 respond,70 type="messages",71 additional_inputs=[72 gr.Textbox(value="Course counselor system loaded", label="System message", interactive=False),73 gr.Slider(1, 512, 256, label="Max new tokens"),74 gr.Slider(0.1, 1.0, 0.6, label="Temperature"),75 gr.Slider(0.1, 1.0, 0.95, label="Top-p"),76 ],77)78 79with gr.Blocks() as demo:80 with gr.Sidebar():81 gr.LoginButton()82 chatbot.render()83 84if __name__ == "__main__":85 demo.launch()86 