import os from dotenv import load_dotenv from langchain_pinecone import PineconeVectorStore from pinecone import Pinecone from langchain_together import TogetherEmbeddings from langchain_mistralai import ChatMistralAI import cohere from langchain.retrievers.contextual_compression import ContextualCompressionRetriever from langchain_cohere import CohereRerank load_dotenv() PINECONE_API_KEY=os.getenv("PINECONE_API_KEY") MISTRAL_API_KEY=os.getenv("MISTRAL_API_KEY") TOGETHER_API=os.getenv("TOGETHER_API") COHERE_API_KEY=os.getenv("COHERE_API_KEY") embeddings = TogetherEmbeddings( model="togethercomputer/m2-bert-80M-8k-retrieval", api_key=TOGETHER_API ) model=ChatMistralAI( model="mistral-large-latest", api_key=MISTRAL_API_KEY ) pc = Pinecone(api_key=PINECONE_API_KEY) index_name = "together" index = pc.Index(index_name) vector_store = PineconeVectorStore(index=index, embedding=embeddings) retriever = vector_store.as_retriever() compressor = CohereRerank(model="rerank-v3.5") compression_retriever = ContextualCompressionRetriever( base_compressor=compressor, base_retriever=retriever ) def retrieve(query): compressed_docs = compression_retriever.invoke(query) return compressed_docs[0] def llm(query, history): query=model.invoke(f"You are a helpful AI assistant. Translate the following query to urdu if the query is in urdu then return the same query. Query: {query}. Remember just translate the query and nothing else.").content results=retrieve(query) prompt=f"""" You are a helpful AI Assistant and your job is to help user find relevant shayari. The query is {query} The matching result after semantic search is {results.page_content}. You may exclude interpretation given in the results. Just respond from the context. """ try: response=model.invoke(prompt).content history = history or [] history.append(("You", query)) history.append(("Assistant", results.page_content)) return history, history except Exception as e: return history, history + [("Bot", f"Error in API request: {str(e)}")]