NSamson1 commited on
Commit
a646e09
·
verified ·
1 Parent(s): e0f92ea

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -54
app.py CHANGED
@@ -1,70 +1,79 @@
1
  import pandas as pd
2
  from datasets import load_dataset
3
- from langchain_huggingface import HuggingFaceEmbeddings
4
- from langchain_chroma import Chroma
5
  import gradio as gr
6
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
7
 
8
- # 1. Load Dataset
9
- ds = load_dataset("maxpro291/bankfaqs_dataset")
10
- data = ds['train'][:]
11
- Bank_Data = pd.DataFrame({
12
- 'question': [entry for entry in data['text'] if entry.startswith("Q:")],
13
- 'answer': [entry for entry in data['text'] if entry.startswith("A:")]
14
- })
 
15
 
16
- # 2. Setup Vector Store
17
- embed_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
18
- vectorstore = Chroma.from_texts(
19
- texts=[f"Q: {q}\nA: {a}" for q, a in zip(Bank_Data['question'], Bank_Data['answer'])],
20
- embedding=embed_model,
21
- persist_directory="./chroma_db"
22
- )
23
- retriever = vectorstore.as_retriever()
 
24
 
25
- # 3. Load Model (using smaller, faster model)
26
- model_name = "microsoft/phi-2"
27
- tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
28
- model = AutoModelForCausalLM.from_pretrained(
29
- model_name,
30
- device_map="auto",
31
- torch_dtype="auto",
32
- trust_remote_code=True
33
- )
34
- llm = pipeline(
35
- "text-generation",
36
- model=model,
37
- tokenizer=tokenizer,
38
- max_new_tokens=150,
39
- temperature=0.7
40
- )
 
41
 
42
- # 4. Response Generation
43
- def generate_response(question):
44
  docs = retriever.get_relevant_documents(question)
45
  context = "\n".join([doc.page_content for doc in docs][:2]) if docs else ""
46
 
47
- prompt = f"""|USER| You're a banking expert. {
48
- f"Relevant info: {context}" if context else ""
49
- }\nQuestion: {question}\n|ASSISTANT| """
50
 
51
  response = llm(prompt)[0]['generated_text']
52
- return response.split("|ASSISTANT|")[-1].strip()
53
 
54
- # 5. Gradio Interface with explicit API setup
55
- with gr.Blocks(title="Banking Assistant") as app:
56
- gr.Markdown("## 🏦 Free Banking Q&A Assistant")
57
- chatbot = gr.Chatbot(height=400)
58
- msg = gr.Textbox(label="Your banking question")
59
- clear = gr.Button("Clear")
60
-
61
- def respond(message, chat_history):
62
- response = generate_response(message)
63
- chat_history.append((message, response))
64
- return "", chat_history
65
-
66
- msg.submit(respond, [msg, chatbot], [msg, chatbot])
67
- clear.click(lambda: None, None, chatbot, queue=False)
 
 
 
 
 
 
68
 
69
  if __name__ == "__main__":
70
- app.launch(server_name="0.0.0.0", server_port=7860, share=False)
 
1
  import pandas as pd
2
  from datasets import load_dataset
3
+ from langchain.embeddings import HuggingFaceEmbeddings
4
+ from langchain.vectorstores import Chroma
5
  import gradio as gr
6
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
7
 
8
+ # 1. Load and prepare dataset
9
+ def load_bank_data():
10
+ ds = load_dataset("maxpro291/bankfaqs_dataset")
11
+ data = ds['train'][:]
12
+ return pd.DataFrame({
13
+ 'question': [entry for entry in data['text'] if entry.startswith("Q:")],
14
+ 'answer': [entry for entry in data['text'] if entry.startswith("A:")]
15
+ })
16
 
17
+ # 2. Setup vector store
18
+ def setup_retriever(data):
19
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
20
+ vectorstore = Chroma.from_texts(
21
+ texts=[f"Q: {q}\nA: {a}" for q, a in zip(data['question'], data['answer'])],
22
+ embedding=embeddings,
23
+ persist_directory="./chroma_db_bank"
24
+ )
25
+ return vectorstore.as_retriever()
26
 
27
+ # 3. Load LLM
28
+ def load_llm():
29
+ model_name = "microsoft/phi-2"
30
+ tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
31
+ model = AutoModelForCausalLM.from_pretrained(
32
+ model_name,
33
+ device_map="auto",
34
+ torch_dtype="auto",
35
+ trust_remote_code=True
36
+ )
37
+ return pipeline(
38
+ "text-generation",
39
+ model=model,
40
+ tokenizer=tokenizer,
41
+ max_new_tokens=150,
42
+ temperature=0.7
43
+ )
44
 
45
+ # 4. Response generation
46
+ def generate_response(question, retriever, llm):
47
  docs = retriever.get_relevant_documents(question)
48
  context = "\n".join([doc.page_content for doc in docs][:2]) if docs else ""
49
 
50
+ prompt = f"""Instruct: You're a banking expert. {
51
+ f"Context: {context}" if context else ""
52
+ }\nQuestion: {question}\nAnswer: """
53
 
54
  response = llm(prompt)[0]['generated_text']
55
+ return response.split("Answer: ")[-1].strip()
56
 
57
+ # 5. Initialize components
58
+ bank_data = load_bank_data()
59
+ retriever = setup_retriever(bank_data)
60
+ llm = load_llm()
61
+
62
+ # 6. Gradio interface
63
+ def chat_interface(question, history):
64
+ response = generate_response(question, retriever, llm)
65
+ return response
66
+
67
+ demo = gr.ChatInterface(
68
+ fn=chat_interface,
69
+ title="Banking Assistant 🏦",
70
+ examples=[
71
+ "How do I open a savings account?",
72
+ "What's the difference between debit and credit cards?",
73
+ "How do I apply for a loan?"
74
+ ],
75
+ theme="soft"
76
+ )
77
 
78
  if __name__ == "__main__":
79
+ demo.launch(server_name="0.0.0.0", server_port=7860)