aakash-malhan commited on
Commit
0e1d30c
·
verified ·
1 Parent(s): d364c27

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -17
app.py CHANGED
@@ -2,13 +2,15 @@ import os
2
  import subprocess
3
  import gradio as gr
4
  from langchain_community.vectorstores import Weaviate
5
- from langchain_groq import ChatGroq
6
  from langchain.chains import RetrievalQA
7
  from langchain.prompts import PromptTemplate
8
  from sentence_transformers import SentenceTransformer
9
  import weaviate
10
 
11
- # SECRETS
 
 
 
12
  WEAVIATE_URL = os.environ["WEAVIATE_URL"]
13
  WEAVIATE_KEY = os.environ["WEAVIATE_KEY"]
14
  os.environ["GROQ_API_KEY"] = os.environ["GROQ_API_KEY"]
@@ -16,44 +18,72 @@ os.environ["GROQ_API_KEY"] = os.environ["GROQ_API_KEY"]
16
  # AUTO-INGEST ON START
17
  def run_ingestion():
18
  print("Running ingestion...")
19
- subprocess.run(["python", "ingest.py"], check=True)
20
- print("Ingestion complete!")
 
 
 
 
21
 
 
22
  run_ingestion()
23
 
24
  # RAG CHAIN
25
  @gr.cache
26
  def get_rag_chain():
27
- client = weaviate.Client(url=WEAVIATE_URL, auth_client_secret=weaviate.AuthApiKey(WEAVIATE_KEY))
 
 
 
 
28
  embedder = SentenceTransformer("all-MiniLM-L6-v2")
29
  vectorstore = Weaviate(client, "Paper", "text", embedding=embedder)
30
  retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
31
 
 
32
  llm = ChatGroq(model="llama-3.1-70b-instruct", temperature=0)
 
33
  prompt = PromptTemplate.from_template(
34
  "Answer using only this context:\n{context}\n\nQuestion: {question}\nAnswer:"
35
  )
36
- return RetrievalQA.from_chain_type(llm=llm, retriever=retriever, chain_type_kwargs={"prompt": prompt})
 
 
 
 
37
 
38
  def search(query):
39
  try:
40
  qa = get_rag_chain()
41
  result = qa.invoke({"query": query})
42
  answer = result["result"]
 
43
  sources = "\n\n".join([
44
- f"**{doc.metadata['title']}**\n{doc.page_content[:300]}..."
45
  for doc in result["source_documents"]
46
  ])
47
- return answer, sources
48
  except Exception as e:
49
- return f"Error: {str(e)}", ""
50
-
51
- # UI
52
- with gr.Blocks() as demo:
53
- gr.Markdown("# ArXiv RAG Search")
54
- txt = gr.Textbox(label="Ask", placeholder="What is attention?")
55
- btn = gr.Button("Search")
56
- out1 = gr.Markdown(); out2 = gr.Markdown()
57
- btn.click(search, txt, [out1, out2])
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  demo.launch()
 
2
  import subprocess
3
  import gradio as gr
4
  from langchain_community.vectorstores import Weaviate
 
5
  from langchain.chains import RetrievalQA
6
  from langchain.prompts import PromptTemplate
7
  from sentence_transformers import SentenceTransformer
8
  import weaviate
9
 
10
+ # Groq import
11
+ from langchain_groq import ChatGroq
12
+
13
+ # === SECRETS ===
14
  WEAVIATE_URL = os.environ["WEAVIATE_URL"]
15
  WEAVIATE_KEY = os.environ["WEAVIATE_KEY"]
16
  os.environ["GROQ_API_KEY"] = os.environ["GROQ_API_KEY"]
 
18
  # AUTO-INGEST ON START
19
  def run_ingestion():
20
  print("Running ingestion...")
21
+ result = subprocess.run(["python", "ingest.py"], capture_output=True, text=True)
22
+ print(result.stdout)
23
+ if result.returncode != 0:
24
+ print("Ingestion failed:", result.stderr)
25
+ else:
26
+ print("Ingestion complete!")
27
 
28
+ # Run once at startup
29
  run_ingestion()
30
 
31
  # RAG CHAIN
32
  @gr.cache
33
  def get_rag_chain():
34
+ # v3 Weaviate Client
35
+ client = weaviate.Client(
36
+ url=WEAVIATE_URL,
37
+ auth_client_secret=weaviate.AuthApiKey(WEAVIATE_KEY)
38
+ )
39
  embedder = SentenceTransformer("all-MiniLM-L6-v2")
40
  vectorstore = Weaviate(client, "Paper", "text", embedding=embedder)
41
  retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
42
 
43
+ # Use ChatGroq
44
  llm = ChatGroq(model="llama-3.1-70b-instruct", temperature=0)
45
+
46
  prompt = PromptTemplate.from_template(
47
  "Answer using only this context:\n{context}\n\nQuestion: {question}\nAnswer:"
48
  )
49
+ return RetrievalQA.from_chain_type(
50
+ llm=llm,
51
+ retriever=retriever,
52
+ chain_type_kwargs={"prompt": prompt}
53
+ )
54
 
55
  def search(query):
56
  try:
57
  qa = get_rag_chain()
58
  result = qa.invoke({"query": query})
59
  answer = result["result"]
60
+
61
  sources = "\n\n".join([
62
+ f"**{doc.metadata.get('title', 'No Title')}**\n{doc.page_content[:300]}..."
63
  for doc in result["source_documents"]
64
  ])
65
+ return answer, sources if sources.strip() else "No sources retrieved."
66
  except Exception as e:
67
+ return f"Error: {str(e)}", "Check logs."
68
+
69
+ # GRADIO UI
70
+ with gr.Blocks(title="ArXiv RAG Search") as demo:
71
+ gr.Markdown("# ArXiv RAG Search Engine")
72
+ gr.Markdown("10K+ research papers • Llama-3.1 • Weaviate • Auto-indexed")
73
+
74
+ with gr.Row():
75
+ txt = gr.Textbox(
76
+ label="Ask about AI, physics, math...",
77
+ placeholder="What is the attention mechanism?",
78
+ lines=2
79
+ )
80
+ btn = gr.Button("Search", variant="primary")
81
+
82
+ with gr.Row():
83
+ out_answer = gr.Markdown(label="Answer")
84
+ out_sources = gr.Markdown(label="Sources")
85
+
86
+ btn.click(search, inputs=txt, outputs=[out_answer, out_sources])
87
+ txt.submit(lambda x: (x, gr.update()), txt, [txt, btn]).then(search, txt, [out_answer, out_sources])
88
 
89
  demo.launch()