Adieee5 commited on
Commit
ca8feaa
·
verified ·
1 Parent(s): c947e9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -44
app.py CHANGED
@@ -1,44 +1,80 @@
1
- FROM python:3.9
2
-
3
- # Create a non-root user
4
- RUN useradd -m -u 1000 user
5
- USER user
6
- ENV PATH="/home/user/.local/bin:$PATH"
7
-
8
- # Set working directory
9
- WORKDIR /app
10
-
11
- # Copy and install Python dependencies
12
- COPY --chown=user ./requirements.txt requirements.txt
13
- RUN pip install --no-cache-dir --upgrade -r requirements.txt
14
-
15
- # Install system dependencies and build tools
16
- USER root
17
- RUN apt-get update && apt-get install -y \
18
- python3 \
19
- python3-pip \
20
- python3-venv \
21
- wget \
22
- build-essential
23
-
24
- # Install newer SQLite version
25
- WORKDIR /tmp
26
- RUN wget https://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz \
27
- && tar -xvf sqlite-autoconf-3410200.tar.gz \
28
- && cd sqlite-autoconf-3410200 \
29
- && ./configure \
30
- && make \
31
- && make install
32
-
33
- # Update library path to use the new SQLite
34
- ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
35
-
36
- # Go back to non-root user and app directory
37
- USER user
38
- WORKDIR /app
39
-
40
- # Copy the app source code
41
- COPY --chown=user . /app
42
-
43
- # Start the app
44
- CMD ["gunicorn", "-b", "0.0.0.0:7860", "app:app", "--preload"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ load_dotenv()
3
+
4
+ import os
5
+ from flask import Flask, request, jsonify, render_template
6
+ from flask_cors import CORS
7
+
8
+ from langchain_community.embeddings import HuggingFaceEmbeddings
9
+ from langchain_community.vectorstores import Chroma
10
+ from langchain_google_genai import ChatGoogleGenerativeAI
11
+ from langchain_core.prompts import PromptTemplate
12
+ from langchain.chains import RetrievalQA
13
+
14
+ # === Step 1: Load API Key ===
15
+ GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
16
+ if not GOOGLE_API_KEY:
17
+ raise ValueError("GOOGLE_API_KEY not found in environment variables.")
18
+
19
+ # === Step 2: Initialize LLM (Gemini) ===
20
+ llm = ChatGoogleGenerativeAI(
21
+ model="gemini-2.0-flash-lite",
22
+ google_api_key=GOOGLE_API_KEY,
23
+ convert_system_message_to_human=True
24
+ )
25
+
26
+ # === Step 3: Load Chroma Vector Store ===
27
+ embedding_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-en-v1.5")
28
+ vectordb = Chroma(
29
+ persist_directory="./chroma_store",
30
+ embedding_function=embedding_model,
31
+ collection_name="pdf_search_chroma"
32
+ )
33
+ retriever = vectordb.as_retriever(search_kwargs={"k": 6})
34
+
35
+ # === Step 4: Custom Prompt Template ===
36
+ prompt_template = PromptTemplate.from_template("""
37
+ You are an intelligent assistant for students asking about their university.
38
+ If answer is not defined or not clearly understood, ask for clarification.
39
+ Answer clearly and helpfully based on the retrieved context. Do not make up information or suggestions.
40
+ Context:
41
+ {context}
42
+ Question:
43
+ {question}
44
+ Answer:
45
+ """)
46
+
47
+ # === Step 5: Create Retrieval-QA Chain ===
48
+ qa_chain = RetrievalQA.from_chain_type(
49
+ llm=llm,
50
+ chain_type="stuff",
51
+ retriever=retriever,
52
+ chain_type_kwargs={"prompt": prompt_template}
53
+ )
54
+
55
+ # === Step 6: Flask Setup ===
56
+ app = Flask(__name__, static_folder="static", template_folder="templates")
57
+ # === Step 7: Serve Frontend ===
58
+
59
+ @app.route("/")
60
+ def index():
61
+ return render_template("index.html") # Make sure chat.html exists
62
+
63
+
64
+ @app.route('/get', methods=['POST'])
65
+ def chat():
66
+ data = request.json
67
+ query = data.get('message', '').strip()
68
+
69
+ if not query:
70
+ return jsonify({"error": "No message provided."}), 400
71
+
72
+ try:
73
+ response = qa_chain.run(query)
74
+ return jsonify({"response": response})
75
+ except Exception as e:
76
+ return jsonify({"error": str(e)}), 500
77
+
78
+ # === Step 9: Run the App ===
79
+ if __name__ == '__main__':
80
+ app.run(debug=False)