invincible-jha commited on
Commit
a1b124b
·
verified ·
1 Parent(s): 755f44c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -16
app.py CHANGED
@@ -9,7 +9,6 @@ from sklearn.feature_extraction.text import CountVectorizer
9
  from sklearn.naive_bayes import MultinomialNB
10
  import asyncio
11
  from crewai import Agent as CrewAgent, Task, Crew
12
- import autogen
13
  import openai
14
 
15
  # Set up logging
@@ -32,6 +31,20 @@ except Exception as e:
32
  logger.error(f"Failed to initialize InferenceClient: {e}")
33
  sys.exit(1)
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  # Guardrail functions
36
  def sanitize_input(input_text):
37
  return re.sub(r'[<>&\']', '', input_text)
@@ -65,23 +78,73 @@ def check_confidence(response):
65
  uncertain_phrases = ["I'm not sure", "It's possible", "I don't have enough information"]
66
  return not any(phrase.lower() in response.lower() for phrase in uncertain_phrases)
67
 
68
- async def generate_response(prompt):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  try:
70
- return await client.text_generation(prompt, max_new_tokens=500, temperature=0.7)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  except Exception as e:
72
- logger.error(f"Error generating response: {e}")
73
- return "I apologize, but I'm having trouble generating a response at the moment. Please try again later."
74
-
75
- def post_process_response(response):
76
- response = re.sub(r'\b(stupid|dumb|idiotic|foolish)\b', 'mistaken', response, flags=re.IGNORECASE)
77
-
78
- if not re.search(r'(Thank you|Is there anything else|Hope this helps|Let me know if you need more information)\s*$', response, re.IGNORECASE):
79
- response += "\n\nIs there anything else I can help you with regarding Zerodha's services?"
80
-
81
- if re.search(r'\b(invest|trade|buy|sell|market)\b', response, re.IGNORECASE):
82
- response += "\n\nPlease note that this information is for educational purposes only and should not be considered as financial advice. Always do your own research and consider consulting with a qualified financial advisor before making investment decisions."
83
-
84
- return response
85
 
86
  # Gradio interface setup
87
  demo = gr.ChatInterface(
 
9
  from sklearn.naive_bayes import MultinomialNB
10
  import asyncio
11
  from crewai import Agent as CrewAgent, Task, Crew
 
12
  import openai
13
 
14
  # Set up logging
 
31
  logger.error(f"Failed to initialize InferenceClient: {e}")
32
  sys.exit(1)
33
 
34
+ # Shared context for agents
35
+ SHARED_CONTEXT = """You are part of a multi-agent system designed to provide respectful, empathetic, and accurate support for Zerodha, a leading Indian financial services company. Your role is crucial in ensuring all interactions uphold the highest standards of customer service while maintaining Zerodha's excellent reputation.
36
+
37
+ Key points about Zerodha:
38
+ 1. India's largest discount broker, known for innovative technology and low-cost trading.
39
+ 2. Flat fee structure: ₹20 per executed order for intraday and F&O trades, zero brokerage for delivery equity investments.
40
+ 3. Main trading platform: Kite (web and mobile).
41
+ 4. Coin platform for commission-free direct mutual fund investments.
42
+ 5. Extensive educational resources through Varsity.
43
+ 6. Additional tools: Sentinel (price alerts) and ChartIQ (advanced charting).
44
+ 7. Console for account management and administrative tasks.
45
+
46
+ Always prioritize user safety, ethical investing practices, and transparent communication. Never provide information that could mislead users or bring disrepute to Zerodha."""
47
+
48
  # Guardrail functions
49
  def sanitize_input(input_text):
50
  return re.sub(r'[<>&\']', '', input_text)
 
78
  uncertain_phrases = ["I'm not sure", "It's possible", "I don't have enough information"]
79
  return not any(phrase.lower() in response.lower() for phrase in uncertain_phrases)
80
 
81
+ # Agent setup using CrewAI only
82
+ communication_expert_crew = CrewAgent(
83
+ role='Communication Expert',
84
+ goal='Interpret and rephrase user queries with empathy and respect',
85
+ backstory=SHARED_CONTEXT,
86
+ verbose=True,
87
+ allow_delegation=False
88
+ )
89
+
90
+ response_expert_crew = CrewAgent(
91
+ role='Response Expert',
92
+ goal='Provide accurate, helpful, and emotionally intelligent responses to user queries',
93
+ backstory=SHARED_CONTEXT,
94
+ verbose=True,
95
+ allow_delegation=False
96
+ )
97
+
98
+ # Main function for handling user queries
99
+ async def zerodha_support(message, history):
100
  try:
101
+ sanitized_message = sanitize_input(message)
102
+
103
+ if not is_relevant_topic(sanitized_message):
104
+ return "I'm sorry, but I can only assist with queries related to Zerodha's services and trading. Could you please ask a question about your Zerodha account, trading, or our platforms?"
105
+
106
+ sanitized_message = redact_sensitive_info(sanitized_message)
107
+
108
+ # CrewAI for rephrasing query
109
+ rephrase_task = Task(
110
+ description=f"Rephrase the following user query with empathy and respect: '{sanitized_message}'",
111
+ agent=communication_expert_crew
112
+ )
113
+
114
+ crew = Crew(
115
+ agents=[communication_expert_crew],
116
+ tasks=[rephrase_task],
117
+ verbose=2
118
+ )
119
+
120
+ rephrased_query = await crew.kickoff()
121
+
122
+ # CrewAI for generating the response
123
+ response_task = Task(
124
+ description=f"Generate a comprehensive and empathetic response to: '{rephrased_query}'",
125
+ agent=response_expert_crew
126
+ )
127
+
128
+ response_crew = Crew(
129
+ agents=[response_expert_crew],
130
+ tasks=[response_task],
131
+ verbose=2
132
+ )
133
+
134
+ response = await response_crew.kickoff()
135
+
136
+ if not check_response_content(response):
137
+ response += "\n\nPlease note that I cannot provide specific investment advice or guarantee returns. For personalized guidance, please consult with a qualified financial advisor."
138
+
139
+ if not check_confidence(response):
140
+ return "I apologize, but I'm not confident in providing an accurate answer to this query. For the most up-to-date and accurate information, please contact Zerodha's customer support directly."
141
+
142
+ final_response = post_process_response(response)
143
+
144
+ return final_response
145
  except Exception as e:
146
+ logger.error(f"Error in zerodha_support: {e}")
147
+ return "I apologize, but an error occurred while processing your request. Please try again later."
 
 
 
 
 
 
 
 
 
 
 
148
 
149
  # Gradio interface setup
150
  demo = gr.ChatInterface(