File size: 9,987 Bytes
9b5b26a
 
 
 
c19d193
6aae614
8fe992b
9b5b26a
 
5df72d6
9b5b26a
3d1237b
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
f394bd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
6aae614
ae7a494
 
14b1b15
ae7a494
e121372
bf6d34c
 
29ec968
fe328e0
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
d2f6a24
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
9b5b26a
8c01ffb
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool

from Gradio_UI import GradioUI

# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type
    #Keep this format for the description / args / args description but feel free to modify the tool
    """A tool that does nothing yet 
    Args:
        arg1: the first argument
        arg2: the second argument
    """
    return "What magic will you build ?"

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        # Create timezone object
        tz = pytz.timezone(timezone)
        # Get current time in that timezone
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"The current local time in {timezone} is: {local_time}"
    except Exception as e:
        return f"Error fetching time for timezone '{timezone}': {str(e)}"

@tool
def analyze_user_review_tool(review: str) -> str:
    """
    AI Agent for User Review and Feedback Analysis

    This AI agent processes and classifies user reviews for "Superstar Teen Patti" into:

    1. **Bug Reports** - Issues with crashes, errors, or malfunctions.
    2. **Feature Requests** - Suggestions for new features or improvements.
    3. **Support Queries** - Questions about game mechanics or troubleshooting help.
    4. **Negative Feedback** - Strong dissatisfaction with the game experience.
    5. **General Feedback** - Neutral or mixed sentiment without specific issues.
    6. **Real Cash Queries** - Questions about playing with real money or any transaction - related issues that related to real money and related to a financial service or application.
    7. **Transaction Issues** - Complaints about delayed, missing, or failed purchases.
    Example Responses:
    ------------------
    - **Bug Report**: "The game crashes frequently."  
      *AI Response*: "We're sorry for the issue. Our team is investigating. Could you share more details?"

    - **Feature Request**: "Can you add a new tournament mode?"  
      *AI Response*: "Great idea! We love hearing suggestions. We'll consider it for future updates."

    - **Support Query**: "How do I earn free chips?"  
      *AI Response*: "You can earn free chips through daily rewards, lucky draws, and events!"

    - **Negative Feedback**: "This game is the worst!"  
      *AI Response*: "We're sorry to hear that. Let us know how we can improve your experience."

    - **General Feedback**: "I've been playing for a while."  
      *AI Response*: "Thanks for being a part of Superstar Teen Patti! Let us know if you have any suggestions."

    - **Real Cash Queries**: "Can I win real money in this game?"  
      *AI Response*: "Superstar Teen Patti is an entertainment-based game and does not support real money gambling. It’s meant for fun and enjoyment only."

    Args:
    review: A user review or feedback string.
    Returns:
    A categorized response string.
    """
    review_lower = review.lower()

    # Keyword-based detection
    categories = {
        "Bug Report": ["bug", "issue", "crash", "error", "not working", "broken", "glitch", "lag"],
        "Feature Request": ["feature", "add", "request", "update", "improve", "new mode", "tournament"],
        "Support Query": [
            "help", "support", "can't", "cannot", "how to", "unable", "stuck", "problem", 
            "assist", "assistance", "guide", "guidance", "trouble", "fix", "solution", 
            "need help", "failure", "error", "stopped working", "explain", "why"
        ],
        "Negative Feedback": ["bad", "terrible", "worst", "hate", "disappointed", "frustrated", "not happy", "poor", "waste", "boring"],
        "Neutral Feedback": ["okay", "fine", "decent", "average", "not bad", "meh"],
        "Real Cash Query": ["withdraw", "cash", "money", "deposit", "payout", "real cash", "bank", "payment", "win real money", "amount lost"],
        "Transaction Issues": ["purchase", "bought", "paid", "transaction", "chips not credited", "waiting for chips", "payment issue", "google pay", "order id", "proof of purchase"],
    }

    category_priority = [
        "Transaction Issues", 
        "Real Cash Query",
        "Bug Report", 
        "Support Query", 
        "Negative Feedback", 
        "Feature Request", 
        "Neutral Feedback",
    ]

    detected_categories = {}
       # Check for keyword matches
    for category, keywords in categories.items():
        match_count = sum(1 for word in keywords if word in review_lower)
        if match_count > 0:
            detected_categories[category] = match_count

    # Assign category based on priority
    if detected_categories:
        category = sorted(detected_categories, key=lambda c: category_priority.index(c))[0]
    else:
        category = "General Feedback"

    # Predefined responses
    responses = {
        "Transaction Issues": "We understand how frustrating this can be. If your purchased chips have not been credited yet, please ensure you've provided the necessary transaction details, such as the purchase confirmation email or order ID. Our team will review your case and assist you as soon as possible. Thank you for your patience!",
        "Real Cash Query": "Superstar Teen Patti is an entertainment-based game and does not support real money gambling or withdrawals. It's meant for fun and enjoyment only.",
        "Bug Report": "We're sorry you're experiencing issues. Our team is investigating this problem. Could you provide more details so we can resolve it faster?",
        "Support Query": "It looks like you need assistance! Please check our help center or reach out to our support team for immediate help.",
        "Negative Feedback": "We're truly sorry for your experience. Your feedback is important to us, and we're always looking to improve. Please let us know how we can make things better.",
        "Feature Request": "Thanks for your suggestion! We love hearing new ideas. We'll consider this in our upcoming updates.",
        "Neutral Feedback": "Thank you for sharing your thoughts! Your feedback helps us improve the experience for everyone.",
        "General Feedback": "Thank you for playing Superstar Teen Patti! We appreciate your feedback and hope you enjoy the game."
    }

    return f"Review Category: {category}\n{responses[category]}"

@tool
def account_recovery_tool(username: str = None, email: str = None) -> str:
    """
    A tool to help users recover their accounts by verifying their username or email.

    This tool assists users who have forgotten their account details. If the user provides a username, it will check if an associated email exists and send a recovery link. If the user provides an email, it will check for a matching account and return the associated username along with a recovery link.

    Args:
        username: string  optional The username provided by the user. If given, the tool will attempt to find the associated email and send a recovery link.
        email: string optional The email provided by the user. If given, the tool will check for a matching username and send a recovery link.

    Returns:
        str: A message indicating the recovery status:
             - The associated email will receive a reset link if a valid username is provided.
             - If a valid email is provided, the associated username will be revealed, and a reset link will be sent.
             - If neither is found, a request for a correct email or username is prompted.
    """

    # Dummy user data for validation (in real-world use a database) at list 15
    user_database = {
        "user1": "user1@example.com",
        "user2": "user2@example.com",
        "john_doe": "john.doe@example.com",
        "jane_doe": "jane.doe@example.com",
        } 

    if username:
        # Check if the username exists in the database
        if username in user_database:
            return f" Account found for username '{username}'. A password reset link has been sent to {user_database[username]}."
        else:
            return "No account found with that username. Please try again or provide your email for verification."

    elif email:
        # Search for the email in the database
        for user, user_email in user_database.items():
            if user_email == email:
                return f" Account found for email '{email}'. Your associated username is '{user}'. A password reset link has been sent to your email."
        return "No account found with that email. Please check and try again."

    else:
        return "Please provide either a username or an email to recover your account."

final_answer = FinalAnswerTool()

# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 

model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
custom_role_conversions=None,
)


# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer], ## add your tools here (don't remove final answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)


GradioUI(agent).launch()