CoolFace
Apppublic

palevector/training-courses-chatbot

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
app.py86 linesDownload Raw Back to root
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