File size: 6,071 Bytes
9b5b26a
 
 
 
c19d193
55062fb
6aae614
8fe992b
9b5b26a
 
5df72d6
9b5b26a
55062fb
9b5b26a
55062fb
9b5b26a
 
55062fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
 
6aae614
ae7a494
 
 
 
e121372
bf6d34c
 
29ec968
fe328e0
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
55062fb
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
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
import random
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 select_random_image_style()-> 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
    """Select a random image style to pass to image generation together with the user's input
    Args:
    """
    image_styles = [
    {
        "name": "Flat Design",
        "description": "Ultra-simplified, two-dimensional visuals with no depth cues.",
        "key_elements": [
            "Solid, un-textured color blocks",
            "Minimal or zero gradients/shadows",
            "Crisp vector edges",
            "High foreground–background contrast",
        ],
    },
    {
        "name": "Low-Poly",
        "description": "Imagery built from large, faceted polygons, echoing early 3-D graphics.",
        "key_elements": [
            "20–200 visible polygon faces",
            "Hard edges, no smoothing",
            "One flat color per face",
            "Directional lighting to emphasize facets",
        ],
    },
    {
        "name": "Cyberpunk Neon",
        "description": "Futuristic, dystopian cityscapes drenched in glowing signage.",
        "key_elements": [
            "High-saturation magentas, cyans, blues",
            "Rim lighting and bloom effects",
            "Rain-slicked reflections",
            "Dense vertical composition with cluttered signage",
        ],
    },
    {
        "name": "Studio Portrait (Rembrandt Lighting)",
        "description": "Classical studio portrait with the signature cheek-triangle of light.",
        "key_elements": [
            "Single softbox at ~45°",
            "Triangle of light under shadow-side eye",
            "Low-key background, gentle fall-off",
            "Natural skin tones, minimal retouch",
        ],
    },
    {
        "name": "Watercolor Wash",
        "description": "Loose, translucent paint strokes and bleeds on textured paper.",
        "key_elements": [
            "Soft edges and color bleeding",
            "Paper grain visible",
            "Low-contrast outlines or none",
            "Wet-on-wet and drybrush variation",
        ],
    },
    {
        "name": "Art Deco Poster",
        "description": "1920s–30s luxury aesthetic with bold geometry and metallic accents.",
        "key_elements": [
            "Symmetry, stepped forms, sunbursts",
            "Narrow stylized typography",
            "Gold, black, cream, teal palette",
            "Elongated figures or transport motifs",
        ],
    },
    {
        "name": "Noir Film Still",
        "description": "High-contrast B&W cinematography evoking 1940s crime drama.",
        "key_elements": [
            "Hard key plus side/back lights",
            "Deep blacks, clipped highlights",
            "Venetian-blind or window-frame shadows",
            "Urban set dressing, cigarette haze",
        ],
    },
    {
        "name": "Ghibli-Inspired Pastel Fantasy",
        "description": "Soft, whimsical landscapes reminiscent of Studio Ghibli backgrounds.",
        "key_elements": [
            "Pastel greens, blues, creams",
            "Painterly visible brush strokes",
            "Nature focus: rolling hills, fluffy clouds",
            "Tiny architectural details for scale",
        ],
    },
    {
        "name": "Brutalist Collage",
        "description": "Raw photomontage reflecting Brutalist concrete heft.",
        "key_elements": [
            "Greyscale concrete textures",
            "Blocky, asymmetric composition",
            "Bold Helvetica-style typography",
            "Occasional harsh primary accent",
        ],
    },
    {
        "name": "Glitch Vaporwave",
        "description": "Retro-digital aesthetic mixing ’80s nostalgia with data corruption artifacts.",
        "key_elements": [
            "CRT scanlines, RGB channel shifts, datamosh blocks",
            "Sunset gradients (purple→pink→orange)",
            "Greek busts, palm trees, wireframe grids",
            "Oversized Japanese katakana/kanji overlays",
        ],
    },
]
    return image_styles[random.randint(0,len(image_styles))]

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


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, image_generation_tool, select_random_image_style], ## 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()