Team Ai
Apppublic

Sambhavnoobcoder/Lecture-Notes-Chatbot

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py168 linesDownload Raw Back to root
1import google.generativeai as genai2import requests3import numpy as np4import faiss5from sentence_transformers import SentenceTransformer6from bs4 import BeautifulSoup7import gradio as gr8 9# Configure Gemini API key10GOOGLE_API_KEY = 'AIzaSyA0yLvySmj8xjMd0sedSgklg1fj0wBDyyw'  # Replace with your API key11genai.configure(api_key=GOOGLE_API_KEY)12 13# Fetch lecture notes and model architectures14def fetch_lecture_notes():15    lecture_urls = [16        "https://stanford-cs324.github.io/winter2022/lectures/introduction/",17        "https://stanford-cs324.github.io/winter2022/lectures/capabilities/",18        "https://stanford-cs324.github.io/winter2022/lectures/data/",19        "https://stanford-cs324.github.io/winter2022/lectures/modeling/"20    ]21    lecture_texts = []22    for url in lecture_urls:23        response = requests.get(url)24        if response.status_code == 200:25            print(f"Fetched content from {url}")26            lecture_texts.append((extract_text_from_html(response.text), url))27        else:28            print(f"Failed to fetch content from {url}, status code: {response.status_code}")29    return lecture_texts30 31def fetch_model_architectures():32    url = "https://github.com/Hannibal046/Awesome-LLM#milestone-papers"33    response = requests.get(url)34    if response.status_code == 200:35        print(f"Fetched model architectures, status code: {response.status_code}")36        return extract_text_from_html(response.text), url37    else:38        print(f"Failed to fetch model architectures, status code: {response.status_code}")39        return "", url40 41# Extract text from HTML content42def extract_text_from_html(html_content):43    soup = BeautifulSoup(html_content, 'html.parser')44    for script in soup(["script", "style"]):45        script.extract()46    text = soup.get_text(separator="\n", strip=True)47    return text48 49# Generate embeddings using SentenceTransformers50def create_embeddings(texts, model):51    texts_only = [text for text, _ in texts]52    embeddings = model.encode(texts_only)53    return embeddings54 55# Initialize FAISS index56def initialize_faiss_index(embeddings):57    dimension = embeddings.shape[1]  # Assuming all embeddings have the same dimension58    index = faiss.IndexFlatL2(dimension)59    index.add(embeddings.astype('float32'))60    return index61 62# Handle natural language queries63conversation_history = []64 65def handle_query(query, faiss_index, embeddings_texts, model):66    global conversation_history67 68    query_embedding = model.encode([query]).astype('float32')69 70    # Search FAISS index71    _, indices = faiss_index.search(query_embedding, 3)  # Retrieve top 3 results72    relevant_texts = [embeddings_texts[idx] for idx in indices[0]]73 74    # Combine relevant texts and truncate if necessary75    combined_text = "\n".join([text for text, _ in relevant_texts])76    max_length = 500  # Adjust as necessary77    if len(combined_text) > max_length:78        combined_text = combined_text[:max_length] + "..."79 80    # Generate a response using Gemini81    try:82        response = genai.generate_text(83            model="models/text-bison-001",84            prompt=f"Based on the following context:\n\n{combined_text}\n\nAnswer the following question: {query}",85            max_output_tokens=20086        )87        generated_text = response.result if response else "No response generated."88    except Exception as e:89        print(f"Error generating text: {e}")90        generated_text = "An error occurred while generating the response."91 92    # Update conversation history93    conversation_history.append((query, generated_text))94 95    # Extract sources96    sources = [url for _, url in relevant_texts]97 98    return generated_text, sources99 100def generate_concise_response(prompt, context):101    try:102        response = genai.generate_text(103            model="models/text-bison-001",104            prompt=f"{prompt}\n\nContext: {context}\n\nAnswer:",105            max_output_tokens=200106        )107        return response.result if response else "No response generated."108    except Exception as e:109        print(f"Error generating concise response: {e}")110        return "An error occurred while generating the concise response."111 112# Main function to execute the pipeline113def chatbot(message, history):114    lecture_notes = fetch_lecture_notes()115    model_architectures = fetch_model_architectures()116 117    all_texts = lecture_notes + [model_architectures]118 119    # Load the SentenceTransformers model120    embedding_model = SentenceTransformer('paraphrase-MiniLM-L6-v2')121 122    embeddings = create_embeddings(all_texts, embedding_model)123 124    # Initialize FAISS index125    faiss_index = initialize_faiss_index(np.array(embeddings))126 127    response, sources = handle_query(message, faiss_index, all_texts, embedding_model)128    print("Query:", message)129    print("Response:", response)130    total_text = response131    132    if sources:133        print("Sources:", sources)134        relevant_source = "\n".join(sources)135        total_text += f"\n\nSources:\n{relevant_source}"136    else:137        print("Sources: None of the provided sources were used.")138    139    print("----")140 141    # Generate a concise and relevant summary using Gemini142    prompt = "Summarize the user queries so far"143    user_queries_summary = " ".join([msg[0] for msg in history] + [message])144    concise_response = generate_concise_response(prompt, user_queries_summary)145    print("Concise Response:")146    print(concise_response)147        148    return total_text149 150# Create the Gradio interface151iface = gr.ChatInterface(152    chatbot,153    title="LLM Research Assistant",154    description="Ask questions about LLM architectures, datasets, and training techniques.",155    examples=[156        "What are some milestone model architectures in LLMs?",157        "Explain the transformer architecture.",158        "Tell me about datasets used to train LLMs.",159        "How are LLM training datasets cleaned and preprocessed?",160        "Summarize the user queries so far"161    ],162    retry_btn="Regenerate",163    undo_btn="Undo",164    clear_btn="Clear",165)166 167if __name__ == "__main__":168    iface.launch(server_name="0.0.0.0", server_port=7860)