from sentence_transformers import SentenceTransformer import numpy as np courses = [ { "title": "Data Science with Python", "description": "Learn the basics of data science, including machine learning and Python programming.", "curriculum": "Python, Pandas, Numpy, Machine Learning, Data Visualization" }, { "title": "Introduction to Machine Learning", "description": "A beginner-friendly course to understand machine learning algorithms.", "curriculum": "Supervised Learning, Unsupervised Learning, Regression, Classification" }, { "title": "Deep Learning Fundamentals", "description": "An introductory course on deep learning and neural networks.", "curriculum": "Neural Networks, CNN, RNN, Deep Learning" }, ] course_texts = [course["title"] + " " + course["description"] + " " + course["curriculum"] for course in courses] # Load the model with a fallback option try: model = SentenceTransformer('paraphrase-MiniLM-L6-v2') except: model = SentenceTransformer('all-MiniLM-L6-v2') # Encode the course texts course_embeddings = model.encode(course_texts) def search_courses(query): query_embedding = model.encode([query])[0] similarities = np.dot(course_embeddings, query_embedding) sorted_course_indices = np.argsort(similarities)[::-1] results = [] for idx in sorted_course_indices[:3]: # Top 3 results results.append({ "title": courses[idx]["title"], "description": courses[idx]["description"], "curriculum": courses[idx]["curriculum"] }) return results