Spaces:
Sleeping
Sleeping
Update tools.py
Browse files
tools.py
CHANGED
|
@@ -1,10 +1,59 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from langchain_core.tools import tool
|
| 2 |
+
|
| 3 |
+
@tool
|
| 4 |
+
def book_free_trial(name: str, contact: str, preferred_date: str) -> str:
|
| 5 |
+
"""Book a free 30-minute introductory class for a new user."""
|
| 6 |
+
return f"Free trial booked for {name} on {preferred_date}. Contact: {contact}"
|
| 7 |
+
|
| 8 |
+
@tool
|
| 9 |
+
def subscribe_to_membership(name: str, phone_number: str, package_type: str) -> str:
|
| 10 |
+
"""Subscribe user to a membership package."""
|
| 11 |
+
return f"Membership subscription created for {name} ({phone_number}) - Package: {package_type}"
|
| 12 |
+
|
| 13 |
+
@tool
|
| 14 |
+
def cancel_membership(phone_number: str, request_time: str) -> str:
|
| 15 |
+
"""Cancel a membership within 48 hours of payment."""
|
| 16 |
+
return f"Membership cancellation processed for {phone_number} at {request_time}"
|
| 17 |
+
|
| 18 |
+
@tool
|
| 19 |
+
def postpone_membership(phone_number: str, reason: str, start_date: str, end_date: str) -> str:
|
| 20 |
+
"""Postpone membership for 2 weeks to 2 months."""
|
| 21 |
+
return f"Membership postponed for {phone_number} from {start_date} to {end_date}. Reason: {reason}"
|
| 22 |
+
|
| 23 |
+
@tool
|
| 24 |
+
def transfer_membership(phone_number: str, new_member_name: str, new_member_phone_number: str) -> str:
|
| 25 |
+
"""Transfer a membership to another person with consent and 200 SAR fee."""
|
| 26 |
+
return f"Membership transferred from {phone_number} to {new_member_name} ({new_member_phone_number}). Fee: 200 SAR"
|
| 27 |
+
|
| 28 |
+
@tool
|
| 29 |
+
def get_current_date() -> str:
|
| 30 |
+
"""Get the current date in YYYY-MM-DD format."""
|
| 31 |
+
from datetime import datetime
|
| 32 |
+
return datetime.now().strftime("%Y-%m-%d")
|
| 33 |
+
|
| 34 |
+
@tool
|
| 35 |
+
def calculate_date_range(start_date: str, duration_months: int) -> str:
|
| 36 |
+
"""Calculate end date given start date and duration in months."""
|
| 37 |
+
from datetime import datetime
|
| 38 |
+
from dateutil.relativedelta import relativedelta
|
| 39 |
+
|
| 40 |
+
start = datetime.strptime(start_date, "%Y-%m-%d")
|
| 41 |
+
end = start + relativedelta(months=duration_months)
|
| 42 |
+
|
| 43 |
+
return f"Start: {start.strftime('%Y-%m-%d')}, End: {end.strftime('%Y-%m-%d')}, Duration: {(end - start).days} days"
|
| 44 |
+
|
| 45 |
+
def format_messages_with_actions(messages):
|
| 46 |
+
"""Format messages for the manager prompt"""
|
| 47 |
+
formatted = []
|
| 48 |
+
for msg in messages:
|
| 49 |
+
if hasattr(msg, 'content'):
|
| 50 |
+
formatted.append(f"Message: {msg.content}")
|
| 51 |
+
elif hasattr(msg, 'invoke'):
|
| 52 |
+
# Handle tool calls properly
|
| 53 |
+
formatted.append(f"Tool call: {str(msg)}")
|
| 54 |
+
return "\n".join(formatted)
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
tools_list = [ calculate_date_range, get_current_date, book_free_trial, subscribe_to_membership, cancel_membership, postpone_membership, transfer_membership ]
|
| 59 |
+
|