0504ankitsharma commited on
Commit
0a59c28
·
verified ·
1 Parent(s): 0fdf6bf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -38
app.py CHANGED
@@ -1,50 +1,38 @@
1
  import os
2
  import re
3
- from langchain_anthropic import ChatAnthropic
 
 
 
 
 
4
  from langchain.text_splitter import RecursiveCharacterTextSplitter
5
  from langchain.chains.combine_documents import create_stuff_documents_chain
6
- from langchain_core.prompts import ChatPromptTemplate
7
  from langchain.chains import create_retrieval_chain
8
- from langchain_community.vectorstores import FAISS
9
- from langchain_community.document_loaders import TextLoader
10
- from fastapi.middleware.cors import CORSMiddleware
11
- from fastapi import FastAPI
12
- from pydantic import BaseModel
13
- from langchain_community.embeddings import HuggingFaceBgeEmbeddings
14
  import time
15
 
 
 
 
 
 
 
 
 
16
  def clean_response(response):
17
- # Remove any leading/trailing whitespace, including newlines
18
  cleaned = response.strip()
19
-
20
- # Remove any enclosing quotation marks
21
  cleaned = re.sub(r'^["\']+|["\']+$', '', cleaned)
22
-
23
- # Replace multiple newlines with a single newline
24
  cleaned = re.sub(r'\n+', '\n', cleaned)
25
-
26
- # Remove any remaining '\n' characters
27
  cleaned = cleaned.replace('\\n', '')
28
-
29
  return cleaned
30
 
31
- app = FastAPI()
32
-
33
- app.add_middleware(
34
- CORSMiddleware,
35
- allow_origins=["*"],
36
- allow_credentials=True,
37
- allow_methods=["*"],
38
- allow_headers=["*"],
39
- )
40
-
41
  anthropic_api_key = os.environ.get('ANTHROPIC_API_KEY')
42
  llm = ChatAnthropic(anthropic_api_key=anthropic_api_key, model_name="claude-3-sonnet-20240229")
43
 
44
- @app.get("/")
45
- def read_root():
46
- return {"Hello": "World"}
47
-
48
  class Query(BaseModel):
49
  query_text: str
50
 
@@ -64,7 +52,7 @@ Question: {input}
64
 
65
  def vector_embedding():
66
  try:
67
- file_path = "./data.txt"
68
  if not os.path.exists(file_path):
69
  print(f"The file {file_path} does not exist.")
70
  return {"response": "Error: Data file not found"}
@@ -84,7 +72,7 @@ def vector_embedding():
84
  model_norm = HuggingFaceBgeEmbeddings(model_name=model_name, encode_kwargs=encode_kwargs)
85
 
86
  db = FAISS.from_documents(chunks, model_norm)
87
- db.save_local("./vectors_db")
88
 
89
  print("Vector store created and saved successfully.")
90
  return {"response": "Vector Store DB Is Ready"}
@@ -99,11 +87,15 @@ def get_embeddings():
99
  model_norm = HuggingFaceBgeEmbeddings(model_name=model_name, encode_kwargs=encode_kwargs)
100
  return model_norm
101
 
 
 
 
 
102
  @app.post("/anthropic")
103
  def read_item(query: Query):
104
  try:
105
  embeddings = get_embeddings()
106
- vectors = FAISS.load_local("./vectors_db", embeddings, allow_dangerous_deserialization=True)
107
  except Exception as e:
108
  print(f"Error loading vector store: {str(e)}")
109
  return {"response": "Vector Store Not Found or Error Loading. Please run /setup first."}
@@ -117,16 +109,18 @@ def read_item(query: Query):
117
  response = retrieval_chain.invoke({'input': prompt1})
118
  print("Response time:", time.process_time() - start)
119
 
120
- # Apply the cleaning function to the response
121
  cleaned_response = clean_response(response['answer'])
122
 
123
- # For debugging, print the cleaned response
124
  print("Cleaned response:", repr(cleaned_response))
125
 
126
- return cleaned_response
127
  else:
128
- return "No Query Found"
129
 
130
  @app.get("/setup")
131
  def setup():
132
- return vector_embedding()
 
 
 
 
 
1
  import os
2
  import re
3
+ from fastapi import FastAPI, Request
4
+ from fastapi.responses import HTMLResponse
5
+ from fastapi.staticfiles import StaticFiles
6
+ from fastapi.templating import Jinja2Templates
7
+ from pydantic import BaseModel
8
+ from langchain.chat_models import ChatAnthropic
9
  from langchain.text_splitter import RecursiveCharacterTextSplitter
10
  from langchain.chains.combine_documents import create_stuff_documents_chain
11
+ from langchain.prompts import ChatPromptTemplate
12
  from langchain.chains import create_retrieval_chain
13
+ from langchain.vectorstores import FAISS
14
+ from langchain.document_loaders import TextLoader
15
+ from langchain.embeddings import HuggingFaceBgeEmbeddings
 
 
 
16
  import time
17
 
18
+ app = FastAPI()
19
+
20
+ # Mount static files
21
+ app.mount("/static", StaticFiles(directory="static"), name="static")
22
+
23
+ # Set up Jinja2 templates
24
+ templates = Jinja2Templates(directory="templates")
25
+
26
  def clean_response(response):
 
27
  cleaned = response.strip()
 
 
28
  cleaned = re.sub(r'^["\']+|["\']+$', '', cleaned)
 
 
29
  cleaned = re.sub(r'\n+', '\n', cleaned)
 
 
30
  cleaned = cleaned.replace('\\n', '')
 
31
  return cleaned
32
 
 
 
 
 
 
 
 
 
 
 
33
  anthropic_api_key = os.environ.get('ANTHROPIC_API_KEY')
34
  llm = ChatAnthropic(anthropic_api_key=anthropic_api_key, model_name="claude-3-sonnet-20240229")
35
 
 
 
 
 
36
  class Query(BaseModel):
37
  query_text: str
38
 
 
52
 
53
  def vector_embedding():
54
  try:
55
+ file_path = "data.txt"
56
  if not os.path.exists(file_path):
57
  print(f"The file {file_path} does not exist.")
58
  return {"response": "Error: Data file not found"}
 
72
  model_norm = HuggingFaceBgeEmbeddings(model_name=model_name, encode_kwargs=encode_kwargs)
73
 
74
  db = FAISS.from_documents(chunks, model_norm)
75
+ db.save_local("vectors_db")
76
 
77
  print("Vector store created and saved successfully.")
78
  return {"response": "Vector Store DB Is Ready"}
 
87
  model_norm = HuggingFaceBgeEmbeddings(model_name=model_name, encode_kwargs=encode_kwargs)
88
  return model_norm
89
 
90
+ @app.get("/", response_class=HTMLResponse)
91
+ async def read_root(request: Request):
92
+ return templates.TemplateResponse("index.html", {"request": request})
93
+
94
  @app.post("/anthropic")
95
  def read_item(query: Query):
96
  try:
97
  embeddings = get_embeddings()
98
+ vectors = FAISS.load_local("vectors_db", embeddings, allow_dangerous_deserialization=True)
99
  except Exception as e:
100
  print(f"Error loading vector store: {str(e)}")
101
  return {"response": "Vector Store Not Found or Error Loading. Please run /setup first."}
 
109
  response = retrieval_chain.invoke({'input': prompt1})
110
  print("Response time:", time.process_time() - start)
111
 
 
112
  cleaned_response = clean_response(response['answer'])
113
 
 
114
  print("Cleaned response:", repr(cleaned_response))
115
 
116
+ return {"response": cleaned_response}
117
  else:
118
+ return {"response": "No Query Found"}
119
 
120
  @app.get("/setup")
121
  def setup():
122
+ return vector_embedding()
123
+
124
+ if __name__ == "__main__":
125
+ import uvicorn
126
+ uvicorn.run(app, host="0.0.0.0", port=7860)