File size: 4,802 Bytes
5b2aed4
 
 
f46801a
4c650d8
29cdc30
f46801a
 
 
 
b3618e8
f46801a
5b2aed4
 
b3618e8
5b2aed4
 
 
 
b3618e8
5b2aed4
 
 
 
 
 
b3618e8
5b2aed4
 
 
 
 
 
b3618e8
5b2aed4
 
 
 
 
 
 
 
 
 
b3618e8
5305f8e
b3618e8
5b2aed4
 
 
 
 
 
 
 
 
 
 
 
b3618e8
f46801a
5b2aed4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b3618e8
5b2aed4
 
f46801a
5b2aed4
 
f46801a
5b2aed4
f46801a
5b2aed4
 
 
 
f46801a
b3618e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b2aed4
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import os
import sys
import logging
import gradio as gr
import autogen
from huggingface_hub import InferenceClient
import re
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import asyncio

# Set up logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Check Python version
if sys.version_info < (3, 7):
    logging.error("This script requires Python 3.7 or higher")
    sys.exit(1)

# Check and set environment variables
required_env_vars = ['HUGGINGFACE_API_KEY']
for var in required_env_vars:
    if var not in os.environ:
        logging.error(f"Environment variable {var} is not set")
        sys.exit(1)

# Initialize the client with the Mistral-7B-Instruct-v0.2 model
try:
    client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.2")
except Exception as e:
    logging.error(f"Failed to initialize InferenceClient: {e}")
    sys.exit(1)

# Rest of your code (SHARED_CONTEXT, guardrail functions, etc.) remains the same

# CrewAI setup
try:
    from crewai import Agent as CrewAgent, Task, Crew
except ImportError:
    logging.error("Failed to import crewai. Make sure it's installed: pip install crewai")
    sys.exit(1)

# CrewAI and AutoGen setup remains the same

# Main function
async def zerodha_support(message, history):
    try:
        sanitized_message = sanitize_input(message)
        
        if not is_relevant_topic(sanitized_message):
            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?"
        
        sanitized_message = redact_sensitive_info(sanitized_message)

        # Use crewAI for initial query rephrasing
        rephrase_task = Task(
            description=f"Rephrase the following user query with empathy and respect: '{sanitized_message}'",
            agent=communication_expert_crew
        )

        crew = Crew(
            agents=[communication_expert_crew],
            tasks=[rephrase_task],
            verbose=2
        )

        rephrased_query = crew.kickoff()

        # Use AutoGen for generating the response
        async def get_autogen_response():
            await user_proxy.a_initiate_chat(
                response_expert_autogen,
                message=f"Please provide a respectful and empathetic response to the following query: '{rephrased_query}'"
            )
            return response_expert_autogen.last_message()["content"]

        response = await get_autogen_response()

        if not check_response_content(response):
            response += "\n\nPlease note that I cannot provide specific investment advice or guarantee returns. For personalized guidance, please consult with a qualified financial advisor."

        if not check_confidence(response):
            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."

        final_response = post_process_response(response)

        return final_response
    except Exception as e:
        logging.error(f"Error in zerodha_support: {e}")
        return "I apologize, but an error occurred while processing your request. Please try again later."

# Wrap the asynchronous function for Gradio
def zerodha_support_wrapper(message, history):
    return asyncio.run(zerodha_support(message, history))

# Gradio interface setup
demo = gr.ChatInterface(
    zerodha_support_wrapper,
    chatbot=gr.Chatbot(height=600),
    textbox=gr.Textbox(placeholder="Ask your question about Zerodha here...", container=False, scale=7),
    title="Zerodha Support Assistant",
    description="Ask questions about Zerodha's services, trading, account management, and more. Our multi-agent system ensures respectful and empathetic responses.",
    theme="soft",
    examples=[
        "How do I open a Zerodha account?",
        "I'm frustrated with the recent changes to the Kite platform. Can you help?",
        "What are the risks involved in F&O trading?",
        "I think there's an error in my account statement. What should I do?",
        "Can you explain Zerodha's policy on intraday trading margins?",
        "I'm new to investing. What resources does Zerodha offer for beginners?",
        "How does Zerodha ensure the security of my investments and personal data?"
    ],
)

if __name__ == "__main__":
    try:
        public_url = demo.launch(share=True, server_name="0.0.0.0", server_port=7860)
        print(f"\n\nSHAREABLE LINK: {public_url}\n\n")
    except Exception as e:
        logging.error(f"Failed to launch Gradio interface: {e}")
        sys.exit(1)