File size: 1,868 Bytes
4b72582
 
 
 
625e3a9
 
4b72582
 
625e3a9
 
4b72582
625e3a9
4b72582
 
 
 
 
 
 
 
 
 
 
 
 
 
625e3a9
4b72582
 
625e3a9
4b72582
 
 
 
 
625e3a9
4b72582
625e3a9
 
4b72582
625e3a9
 
4b72582
 
 
 
 
 
 
 
 
 
 
 
 
 
625e3a9
4b72582
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import os
from groq import Groq
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
import gradio as gr

# Initialize Groq
groq_client = Groq(api_key=os.environ.get("GROQ_API_KEY"))

# Load documents and create vector DB
def load_documents_and_create_vectorstore():
    docs = []
    for file in ["documents/ASTM1.pdf", "documents/ASTM2.pdf"]:
        loader = PyPDFLoader(file)
        docs.extend(loader.load())

    splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    chunks = splitter.split_documents(docs)

    embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
    vectorstore = FAISS.from_documents(chunks, embeddings)

    return vectorstore

# Load documents on startup
vectorstore = load_documents_and_create_vectorstore()

# RAG question answering function
def ask_question(question):
    retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
    docs = retriever.get_relevant_documents(question)

    context = "\n".join([doc.page_content for doc in docs])
    prompt = f"""You are a helpful Civil Engineering assistant. Use the following ASTM standard context to answer:

Context:
{context}

Question: {question}
Answer:"""

    completion = groq_client.chat.completions.create(
        messages=[{"role": "user", "content": prompt}],
        model="llama-3.3-70b-versatile"
    )

    return completion.choices[0].message.content

# Gradio UI
gr.Interface(
    fn=ask_question,
    inputs=gr.Textbox(label="Ask a Civil Engineering Question (based on ASTM)"),
    outputs=gr.Textbox(label="Answer"),
    title="Civil Engineering RAG Assistant",
    description="Ask questions from uploaded ASTM PDFs"
).launch()