Spaces:
Sleeping
Sleeping
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() |