krishshharma/Code-Explainer
0
1from langchain_community.vectorstores import Chroma2from langchain_community.embeddings import HuggingFaceEmbeddings3from langchain_text_splitters import CharacterTextSplitter4from langchain.chains import RetrievalQA5from langchain_huggingface import HuggingFaceEndpoint6import gradio as gr7import os8from dotenv import load_dotenv9 10# Load environment variables11load_dotenv()12 13# 1. Load and prepare documents14def load_docs():15 docs = []16 # Load code examples17 try:18 with open("data/sample_code.py", "r") as f:19 code = f.read()20 docs.append(code)21 except FileNotFoundError:22 print("Warning: data/sample_code.py not found")23 24 # Load documentation25 try:26 with open("data/docs.txt", "r") as f:27 text = f.read()28 docs.append(text)29 except FileNotFoundError:30 print("Warning: data/docs.txt not found")31 32 if not docs:33 raise ValueError("No documents found to process")34 35 # Split into chunks36 text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=50)37 return text_splitter.split_text("\n\n".join(docs))38 39# 2. Create vector database40def setup_vectordb():41 documents = load_docs()42 # Using HuggingFace embeddings43 embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")44 return Chroma.from_texts(documents, embeddings)45 46# 3. Initialize LLM47llm = HuggingFaceEndpoint(48 repo_id="mistralai/Mistral-7B-Instruct-v0.2",49 task="text-generation",50 temperature=0.5,51 max_length=51252)53 54# 4. Create RAG chain55db = setup_vectordb()56qa_chain = RetrievalQA.from_chain_type(57 llm,58 retriever=db.as_retriever(search_kwargs={"k": 2}),59 chain_type="stuff"60)61 62# 5. Gradio interface63def explain_code(code_snippet):64 if not code_snippet.strip():65 return "Please enter some code to explain."66 67 response = qa_chain.invoke({68 "query": f"Explain this code: {code_snippet}. Include time complexity and common use cases."69 })70 return response["result"]71 72interface = gr.Interface(73 fn=explain_code,74 inputs=gr.Textbox(lines=5, placeholder="Paste code here..."),75 outputs="text",76 title="AI Code Explainer",77 description="Enter code to get an explanation of how it works, its time complexity, and common use cases."78)79 80if __name__ == "__main__":81 interface.launch()82 