File size: 5,157 Bytes
569c81e
9b5b26a
 
 
c19d193
6aae614
569c81e
 
e5b4fd0
569c81e
 
 
 
5f2831a
e5b4fd0
569c81e
 
5f2831a
569c81e
 
 
e5b4fd0
9b5b26a
e5b4fd0
 
9b5b26a
e5b4fd0
9b5b26a
569c81e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
 
 
 
 
 
 
e5b4fd0
9b5b26a
e5b4fd0
9b5b26a
 
 
 
8c01ffb
e5b4fd0
569c81e
 
 
 
 
 
 
 
 
 
 
 
6aae614
e5b4fd0
 
569c81e
e5b4fd0
e121372
569c81e
 
 
 
 
13d500a
8c01ffb
e5b4fd0
 
569c81e
 
8c01ffb
861422e
 
569c81e
8c01ffb
8fe992b
569c81e
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
e5b4fd0
569c81e
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
import os
from huggingface_hub import InferenceClient
from Gradio_UI import GradioUI
from dotenv import load_dotenv
load_dotenv()

hf_token = os.getenv("HF_TOKEN")

# Below is an example of a tool that does nothing. Amaze us with your creativity !


@tool
# it's import to specify the return type
def my_custom_tool(arg1: str, arg2: int) -> str:
    # 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 ?"


def get_weather_report_at_coordinates(coordinates, date_time):
    # Dummy function, returns a list of [temperature in °C, risk of rain on a scale 0-1, wave height in m]
    return [28.0, 0.35, 0.85]


def convert_location_to_coordinates(location):
    # Returns dummy coordinates
    return [3.3, -42.0]


@tool
def get_weather_api(location: str, date_time: str) -> str:
    """
    Returns the weather report.

    Args:
        location: the name of the place that you want the weather for.
        date_time: the date and time for which you want the report.
    """
    lon, lat = convert_location_to_coordinates(location)
    date_time = datetime.strptime(date_time)
    return str(get_weather_report_at_coordinates((lon, lat), date_time))


user_data = {}


def update_personality(name: str, personality: str) -> str:
    """Asks the user about his personality before predicting his future
    """
    user_data[name] = personality
    return f"Great! Thanks {name} I ve updates your personality traits, now ask me about your future."


'''
I would like to use an AI model that takes the name and personality and predicts number of kids, career etc '''

client = InferenceClient(model="Qwen/Qwen2.5-Coder-32B-Instruct")


@tool
def predict_future_with_model(name: str, personality: str) -> str:
    """

    Returns:
        str: A fun and futuristic AI-generated prediction.
    Args:
        name: The user's name.
        personality: A description of the user's personality traits.


    """

    prompt = f"""
    Given the name '{name}' and personality traits '{personality}', generate a fun, futuristic prediction for their life.

    Your response should include:
    - A career path
    - A major life event
    - The number of kids they might have
    - A quirky or funny twist related to their personality

    Keep it engaging, futuristic, and a little humorous!
    """

    try:
        response = client.text_generation(prompt, max_new_tokens=100)
        return f"🔮 **Future Prediction for {name}:**\n{response}"
    except Exception as e:
        return f"Oops! I couldn't predict the future this time. Error: {str(e)}"


@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)}"


def tell_joke() -> str:
    """stored jokes.
    """
    jokes = ["Why do we tell actors to 'break a leg?' Because every play has a cast.",
             "I told my wife she should embrace her mistakes. She gave me a hug.",
             "I'm reading a book on the history of glue. I just can't seem to put it down.",
             "I would tell you a joke about an elevator, but it's an uplifting experience.",
             "I told my computer I needed a break and now it won't stop sending me vacation ads.",
             "I used to play piano by ear, but now I use my hands"]
    return random.choice(jokes)


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,
    # it is possible that this model may be overloaded
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    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()