Rezuwan commited on
Commit
44b0c1d
·
verified ·
1 Parent(s): 9db6f42

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -34
app.py CHANGED
@@ -3,7 +3,8 @@ import warnings
3
  import gradio as gr
4
  from dotenv import load_dotenv
5
 
6
- from langchain.chains import ConversationalRetrievalChain, RetrievalQA
 
7
  from langchain_community.vectorstores import FAISS
8
  from langchain_openai import ChatOpenAI
9
  from langchain_community.embeddings import OpenAIEmbeddings
@@ -12,15 +13,12 @@ from langchain_community.embeddings import OpenAIEmbeddings
12
  import gradio_client.utils
13
  gradio_client.utils.json_schema_to_python_type = lambda schema, defs=None: "string"
14
 
15
-
16
-
17
  # Load environment variables
18
  load_dotenv()
19
- OPENAI_API_KEY = os.getenv("OPENAI_API_KEY_P") #or os.getenv("OPENAI_API_KEY_ROBO")
20
  if not OPENAI_API_KEY:
21
  raise ValueError("Missing OPENAI_API_KEY. Please set it in your environment variables.")
22
 
23
-
24
  # Suppress warnings
25
  warnings.filterwarnings("ignore")
26
 
@@ -32,72 +30,61 @@ vectorstore = FAISS.load_local(
32
  "faiss_index_unmad_magz", embeddings, allow_dangerous_deserialization=True
33
  )
34
 
35
- # Load ChatOpenAI model
36
  llm = ChatOpenAI(
37
  model_name="gpt-4o",
38
  temperature=0.7,
39
  max_tokens=1000,
40
- openai_api_key=OPENAI_API_KEY # ✅ this was missing
41
  )
42
 
43
- # Build conversational chain with history
44
  qa = RetrievalQA.from_chain_type(
45
- llm="gpt-4o",
46
  chain_type="stuff",
47
  retriever=vectorstore.as_retriever()
48
  )
49
 
50
- history = []
51
-
52
-
53
- def custom_unmad_satirical_bot(query, top_k=3):
54
- # Step 1: Retrieve context
55
- docs = retriever.invoke(query)
56
  top_contexts = "\n\n---\n\n".join([doc.page_content for doc in docs[:top_k]])
57
 
58
- # Step 2: Create system + user messages
59
  messages = [
60
  SystemMessage(content="""
61
  তুমি 'উন্মাদ' ম্যাগাজিনের একজন পুরানো ব্যঙ্গাত্মক লেখক। তোমার কাজ হলো ব্যবহারকারীর প্রশ্ন শুনে স্যাটায়ার, কটাক্ষ, রসিকতা, ঠাট্টা, আর একটু জ্ঞান মিশিয়ে উত্তর দেওয়া — যাতে লোক হাসে, চিন্তা করে, আবার নতুন কিছু শিখে।
62
-
63
  তুমি কখনোই একদম সোজাসাপ্টা উত্তর দেবে না — বরং একটু অভিনয় করে, অবাক হয়ে, ঠাট্টা করে, খোঁচা মেরে দেবে।
64
-
65
  ইমোজি ব্যবহার করো না।
66
  """),
67
  HumanMessage(content=f"""
68
  🔍 প্রসঙ্গ:
69
  {top_contexts}
70
 
71
- প্রশ্ন: {query}
72
 
73
  উত্তর দাও উন্মাদ ম্যাগাজিনের স্টাইলে — বাংলায়, ব্যঙ্গ করে, কল্পনা আর অতিরঞ্জন দিয়ে।
74
  """)
75
  ]
76
 
77
- # Step 3: Call the model
78
- history.append(chat_model.invoke(messages).content)
79
- return chat_model.invoke(messages).content
80
-
81
-
82
-
83
- # Chatbot logic
84
- def custom_unmad_satirical_bot(message, history):
85
- result = qa({"question": message, "chat_history": history})
86
- answer = result["answer"]
87
- history.append((message, answer))
88
  return "", history
89
 
90
  # Gradio UI
91
  with gr.Blocks() as demo:
92
- gr.Markdown("# USB: Unmad Satirical Bot")
93
  chatbot = gr.Chatbot()
94
  msg = gr.Textbox(placeholder="কি চলে আপনার মনে বলেন শুনি?")
95
  clear = gr.Button("Clear")
96
 
97
- state = gr.State(history)
98
 
99
- msg.submit(sysml_chatbot, [msg, state], [msg, chatbot])
100
  clear.click(lambda: ([], ""), None, [chatbot, msg])
101
 
102
  if __name__ == "__main__":
103
- demo.launch()
 
3
  import gradio as gr
4
  from dotenv import load_dotenv
5
 
6
+ from langchain.schema import SystemMessage, HumanMessage
7
+ from langchain.chains import RetrievalQA
8
  from langchain_community.vectorstores import FAISS
9
  from langchain_openai import ChatOpenAI
10
  from langchain_community.embeddings import OpenAIEmbeddings
 
13
  import gradio_client.utils
14
  gradio_client.utils.json_schema_to_python_type = lambda schema, defs=None: "string"
15
 
 
 
16
  # Load environment variables
17
  load_dotenv()
18
+ OPENAI_API_KEY = os.getenv("OPENAI_API_KEY_P")
19
  if not OPENAI_API_KEY:
20
  raise ValueError("Missing OPENAI_API_KEY. Please set it in your environment variables.")
21
 
 
22
  # Suppress warnings
23
  warnings.filterwarnings("ignore")
24
 
 
30
  "faiss_index_unmad_magz", embeddings, allow_dangerous_deserialization=True
31
  )
32
 
33
+ # Initialize gpt-4o Chat model
34
  llm = ChatOpenAI(
35
  model_name="gpt-4o",
36
  temperature=0.7,
37
  max_tokens=1000,
38
+ openai_api_key=OPENAI_API_KEY
39
  )
40
 
41
+ # Build RetrievalQA chain for backup QA route (optional)
42
  qa = RetrievalQA.from_chain_type(
43
+ llm=llm,
44
  chain_type="stuff",
45
  retriever=vectorstore.as_retriever()
46
  )
47
 
48
+ # Satirical Unmad-style QA function
49
+ def custom_unmad_satirical_bot(message, history, top_k=3):
50
+ # Step 1: Retrieve RAG context
51
+ retriever = vectorstore.as_retriever()
52
+ docs = retriever.invoke(message)
 
53
  top_contexts = "\n\n---\n\n".join([doc.page_content for doc in docs[:top_k]])
54
 
55
+ # Step 2: Create prompt messages
56
  messages = [
57
  SystemMessage(content="""
58
  তুমি 'উন্মাদ' ম্যাগাজিনের একজন পুরানো ব্যঙ্গাত্মক লেখক। তোমার কাজ হলো ব্যবহারকারীর প্রশ্ন শুনে স্যাটায়ার, কটাক্ষ, রসিকতা, ঠাট্টা, আর একটু জ্ঞান মিশিয়ে উত্তর দেওয়া — যাতে লোক হাসে, চিন্তা করে, আবার নতুন কিছু শিখে।
 
59
  তুমি কখনোই একদম সোজাসাপ্টা উত্তর দেবে না — বরং একটু অভিনয় করে, অবাক হয়ে, ঠাট্টা করে, খোঁচা মেরে দেবে।
 
60
  ইমোজি ব্যবহার করো না।
61
  """),
62
  HumanMessage(content=f"""
63
  🔍 প্রসঙ্গ:
64
  {top_contexts}
65
 
66
+ প্রশ্ন: {message}
67
 
68
  উত্তর দাও উন্মাদ ম্যাগাজিনের স্টাইলে — বাংলায়, ব্যঙ্গ করে, কল্পনা আর অতিরঞ্জন দিয়ে।
69
  """)
70
  ]
71
 
72
+ # Step 3: Generate response
73
+ response = llm.invoke(messages).content
74
+ history.append((message, response))
 
 
 
 
 
 
 
 
75
  return "", history
76
 
77
  # Gradio UI
78
  with gr.Blocks() as demo:
79
+ gr.Markdown("# 🧠 USB: Unmad Satirical Bot (উন্মাদীয় বট)")
80
  chatbot = gr.Chatbot()
81
  msg = gr.Textbox(placeholder="কি চলে আপনার মনে বলেন শুনি?")
82
  clear = gr.Button("Clear")
83
 
84
+ state = gr.State([])
85
 
86
+ msg.submit(custom_unmad_satirical_bot, [msg, state], [msg, chatbot])
87
  clear.click(lambda: ([], ""), None, [chatbot, msg])
88
 
89
  if __name__ == "__main__":
90
+ demo.launch()