Spaces:
Sleeping
Sleeping
| from metadata_filtering import build_filters_from_query | |
| from llama_index.llms.openai import OpenAI | |
| import os | |
| from llama_index.vector_stores.qdrant import QdrantVectorStore | |
| from qdrant_client import QdrantClient | |
| from llama_index.core import VectorStoreIndex | |
| from qdrant_client.models import PayloadSchemaType | |
| from llama_index.embeddings.huggingface import HuggingFaceEmbedding | |
| from perplexity import get_response_from_perplexity | |
| from reranker import reranker | |
| #from Evaluation import evaluation | |
| def query_knowledge_base(index, user_query, perplexity_key, cohere_key): | |
| qdrant_key = os.getenv("Qdrant_key") | |
| llm = OpenAI(model="gpt-4o-mini") | |
| perplexity_context = get_response_from_perplexity(user_query, perplexity_key) | |
| cohere_rerank3 = reranker(cohere_key) | |
| filters = build_filters_from_query(user_query) | |
| query_engine = index.as_query_engine( | |
| similarity_top_k=25, | |
| node_postprocessors=[cohere_rerank3], | |
| filters = filters | |
| ) | |
| response = query_engine.query(user_query) | |
| retrieved_context = "\n\n".join( | |
| node.node.get_content() | |
| for node in response.source_nodes | |
| ) | |
| final_prompt = f""" | |
| You are an AI Tutor specialized in Artificial Intelligence, Machine Learning, Deep Learning, Large Language Models, and related subfields. | |
| You must answer ONLY questions related to AI/ML and its subfields. | |
| If the user asks any question outside these topics, politely respond: | |
| "I can answer only AI-related questions." | |
| You are answering a question using two sources: | |
| 1. Retrieved knowledge base context | |
| 2. External context | |
| Use retrieved context as primary truth. | |
| Use external context only to supplement or clarify. | |
| Retrieved context: | |
| {retrieved_context} | |
| External context: | |
| {perplexity_context} | |
| Question: | |
| {user_query} | |
| """ | |
| final_answer = llm.complete(final_prompt) | |
| return final_answer | |
| def connect_tovector_store(): | |
| qdrant_key = os.getenv("Qdrant_key") | |
| qdrant_client = QdrantClient( | |
| url="https://afc34f29-812e-40ea-b515-a8cc6ae9ed37.us-east4-0.gcp.cloud.qdrant.io:6333", | |
| api_key=qdrant_key, | |
| prefer_grpc=False | |
| ) | |
| vector_store = QdrantVectorStore( | |
| client=qdrant_client, | |
| collection_name="ai_tutor_knowledge", | |
| ) | |
| embed_model = HuggingFaceEmbedding( | |
| model_name="sentence-transformers/all-MiniLM-L6-v2" | |
| ) | |
| index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model) | |
| qdrant_client.create_payload_index( | |
| collection_name="ai_tutor_knowledge", | |
| field_name="excerpt_keywords", | |
| field_schema=PayloadSchemaType.TEXT | |
| ) | |
| return index | |