File size: 2,508 Bytes
ca6e923
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langchain_core.tools import tool

@tool
def book_free_trial(name: str, contact: str, preferred_date: str) -> str:
    """Book a free 30-minute introductory class for a new user."""
    return f"Free trial booked for {name} on {preferred_date}. Contact: {contact}"

@tool
def subscribe_to_membership(name: str, phone_number: str, package_type: str) -> str:
    """Subscribe user to a membership package."""
    return f"Membership subscription created for {name} ({phone_number}) - Package: {package_type}"

@tool
def cancel_membership(phone_number: str, request_time: str) -> str:
    """Cancel a membership within 48 hours of payment."""
    return f"Membership cancellation processed for {phone_number} at {request_time}"

@tool
def postpone_membership(phone_number: str, reason: str, start_date: str, end_date: str) -> str:
    """Postpone membership for 2 weeks to 2 months."""
    return f"Membership postponed for {phone_number} from {start_date} to {end_date}. Reason: {reason}"

@tool
def transfer_membership(phone_number: str, new_member_name: str, new_member_phone_number: str) -> str:
    """Transfer a membership to another person with consent and 200 SAR fee."""
    return f"Membership transferred from {phone_number} to {new_member_name} ({new_member_phone_number}). Fee: 200 SAR"

@tool
def get_current_date() -> str:
    """Get the current date in YYYY-MM-DD format."""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d")

@tool 
def calculate_date_range(start_date: str, duration_months: int) -> str:
    """Calculate end date given start date and duration in months."""
    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    start = datetime.strptime(start_date, "%Y-%m-%d")
    end = start + relativedelta(months=duration_months)
    
    return f"Start: {start.strftime('%Y-%m-%d')}, End: {end.strftime('%Y-%m-%d')}, Duration: {(end - start).days} days"

def format_messages_with_actions(messages):
    """Format messages for the manager prompt"""
    formatted = []
    for msg in messages:
        if hasattr(msg, 'content'):
            formatted.append(f"Message: {msg.content}")
        elif hasattr(msg, 'invoke'):
            # Handle tool calls properly
            formatted.append(f"Tool call: {str(msg)}")
    return "\n".join(formatted)



tools_list = [ calculate_date_range, get_current_date, book_free_trial, subscribe_to_membership, cancel_membership, postpone_membership, transfer_membership ]