from sentence_transformers import SentenceTransformer from sentence_transformers import util model = SentenceTransformer( "all-MiniLM-L6-v2" ) def flatten_knowledge(data): texts = [] for section in data.values(): if isinstance(section, list): texts.extend(section) return texts def semantic_search(query, knowledge): texts = flatten_knowledge(knowledge) corpus_embeddings = model.encode( texts, convert_to_tensor=True ) query_embedding = model.encode( query, convert_to_tensor=True ) hits = util.semantic_search( query_embedding, corpus_embeddings, top_k=3 )[0] answer = [] for hit in hits: answer.append( texts[hit["corpus_id"]] ) return "\n\n".join(answer)